ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 242|回复: 14

[求助] 求助VBA中的mid与len语句问题,我是菜鸟首次发帖,大家不要笑

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-9 15:51 | 显示全部楼层 |阅读模式
本帖最后由 shmylovei 于 2019-10-9 16:06 编辑

我的问题时这样的:A列是原始数据,B列是VBA计算结果,C列是想要的结果:
如果汉字后面没有“/”的话,在汉字后面加“/”,有的话就直接提取;
麻烦大神帮忙修改下VBA语句:为什么这个“/”加到字符串最后面了?还有那个if语句为啥总是提示与否错误,该如何修改?

下面是代码:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
For i = 1 To Range("a1").End(4).Row
'If Mid(E4, Len(Left(E4, LenB(E4) - Len(E4))) + 1, Len(Left(E4, LenB(E4) - Len(E4))) - 1) <> "/" Then
Range("B" & i) = Left(Range("A" & i), LenB(Range("A" & i)) - Len(Range("A" & i))) & "/" & Right(Range("A" & i), 2 * Len(Range("A" & i)) - LenB(Range("A" & i)))
'End If
Application.ScreenUpdating = True
Next
End Sub
首次发帖 菜鸟一个 大家不要笑
在线等所有好心大神的帮助

问题描述图片

问题描述图片

代码图片

代码图片

测试--求助.rar

18.38 KB, 下载次数: 12

附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-9 16:08 | 显示全部楼层
有人在吗,大侠们帮帮忙吧

TA的精华主题

TA的得分主题

发表于 2019-10-9 16:23 | 显示全部楼层
你这思路有点问题,函数 lenb 有工作表里和VBA里的返回值是不一样的
在工作表里,一个汉字对应返回值是2,其他字符对应返回值是1
而在VBA里面,所对应的返回值都是2

TA的精华主题

TA的得分主题

发表于 2019-10-9 16:38 | 显示全部楼层
vba的 LenB  和 excel的函数公式 LenB是不一样的。

  1. Private Sub CommandButton1_Click()
  2. Application.ScreenUpdating = False
  3. For i = 1 To Range("a1").End(4).Row
  4. aa = Range("A" & i).Value
  5. bb = Left(aa, LenB(StrConv(aa, vbFromUnicode)) - Len(aa))
  6. 'Range("d" & i) = bb
  7. cc = Replace(aa, bb, bb & "/")
  8. cc = Replace(cc, "//", "/")
  9. Range("B" & i) = cc
  10. Application.ScreenUpdating = True
  11. Next
  12. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-10-9 17:06 | 显示全部楼层
Sub test()
    Dim arr, i As Integer
    arr = [a1].CurrentRegion
    With CreateObject("vbscript.regexp")
        .Pattern = "(\d)"
        For i = 1 To UBound(arr)
            arr(i, 1) = .Replace(arr(i, 1), "/$1")
        Next
        [c1].Resize(UBound(arr)) = arr
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2019-10-9 17:44 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim vData As Variant, nRow As Double, nData As Integer, oData As Object
  3.    
  4.     Application.ScreenUpdating = False
  5.     vData = Sheet1.[A1].CurrentRegion.Resize(, 1).Value
  6.     With CreateObject("Vbscript.RegExp")
  7.         .Global = True
  8.         .IgnoreCase = True
  9.         .Pattern = "[\u4e00-\u9fa5]+"
  10.         For nRow = 1 To UBound(vData)
  11.             Set oData = .Execute(vData(nRow, 1))
  12.             For nData = 1 To oData.Count
  13.                 vData(nRow, 1) = Replace(vData(nRow, 1), oData(nData - 1), oData(nData - 1) & "/")
  14.             Next
  15.         Next
  16.     End With
  17.     [C1].Resize(UBound(vData)) = vData
  18.     Application.ScreenUpdating = True
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-10-9 18:29 | 显示全部楼层
Function Str_new(Str_old As String)
    Dim arr
    With CreateObject("vbscript.regexp")
      .Global = True
      .Pattern = "(\d.*\d)"
        arr = Split(Str_old, "/")
        arr(0) = .Replace(arr(0), "/$1")
        Str_new = Join(arr, "/")
    End With
End Function

TA的精华主题

TA的得分主题

发表于 2019-10-9 19:20 | 显示全部楼层
'消息收到,参与一下,,,

Option Explicit

Sub test()
  Dim arr, i, j
  arr = [a1].CurrentRegion.Resize(, 1)
  For i = 1 To UBound(arr, 1)
    For j = 1 To Len(arr(i, 1))
      If IsNumeric(Mid(arr(i, 1), j, 1)) Then
        arr(i, 1) = Left(arr(i, 1), j - 1) & "/" & Mid(arr(i, 1), j)
        arr(i, 1) = Replace(arr(i, 1), "//", "/")
        Exit For
      End If
    Next
  Next
  [d1].Resize(UBound(arr, 1)) = arr
End Sub

评分

参与人数 2鲜花 +5 收起 理由
YZC51 + 3 太强大了
1635967374 + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-9 19:36 | 显示全部楼层
DevilW 发表于 2019-10-9 16:23
你这思路有点问题,函数 lenb 有工作表里和VBA里的返回值是不一样的
在工作表里,一个汉字对应返回值是2, ...

老师说的是啊 我说为啥用公式的时候是对的,一到VBA就不行了呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-9 19:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-10-20 00:59 , Processed in 0.082690 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表