打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
定位字符串中某特定字符第N次出现的位置 | VBA实例教程

除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www.zhanzhanrufeng.com/cat4/470.html,VBA交流群273624828。

今天做一个程序的时候碰到了这个问题,这节就来谈谈相关的知识。题目是这样的,有这样一个字符串“ABABABAB”,现在我们要把它替换成“1B2B3B4B”,就是依次把A替换成1,2,3,4。直接用replace函数的话所有的A都会替换成同一个,那我们现在就要依次替换其中的每个A,先看下面这组代码:

Sub test1()
s = "ABABABAB"
Do While InStr(s, "A") <> 0
n = n + 1
s = Replace(s, "A", n, , 1)
Loop
MsgBox s
End Sub
上面的代码当中用到了Instr,前面我们讲过,它可以返回字符串中第一个符合条件的字符位置,Replace函数是替换字符串中某个值,其参数形式是
Replace(原字符串,要替换的字符串,替换成的内容,开始查找的位置,替换的次数)
那看上面的Replace(s, "A", n, , 1),就是查找字符串s中的A,将其替换成n,开始查找的位置省略就代表从头开始,最后的1代表只替换一次,所以每次都是把第一个A替换,循环完了也就达到了我们的要求。
但是这样还不够,如果我是要将““ABABABAB”替换成“1AB2AB3AB4AB”呢,如果还用上面的方法就不行了,因为替换之后A还是存在的,你只替换开头的话就无限循环了。现在就要求我们不能取巧了,乖乖的第1次替换第1个A,第2次替换第2个A吧,那现在就看我们怎么定位每个A的位置了。这里我借鉴了ExcelHome香川群子大师的一个自定义函数,稍微发动了一点小地方,来快速定位每个A的位置。
    Function GetPosition(s, Txt, Optional k = 0) '原串,要找的串,第n次出现
Dim n, p, c
n = InStr(s, Txt)
p = n
c = 1
Do
If c = k Then GetPosition = n: Exit Function
n = InStr(n + 1, s, Txt)
If n = 0 Then
p = 0
Exit Do
End If
c = c + 1
p = p & "," & n
Loop
GetPosition = p
End Function
这个函数还是用了Instr,但用的形式和之前那个不太一样,Instr函数还是有另一种形式的,就是Instr(n,str1,str2),意思就是从str1字符串的第n个字符开始向后找,找到第一次出现str2的位置。比如instr(3,"ABBA","A")的结果是4,因为从第3个字符往后找到第1个A的位置是4.这个自定义函数的基本思路就是循环用Instr,每用一次记数器就加1,同时开始位置n从上一次找到的位置往前加1个字符,这样每次都是向后找,当记数器是你输入的次数的时候就跳出循环。
看完整代码
Sub test()
Dim i, t, s, n
s = "ABABABAB"
i = 1
Do While GetPosition(s, "A", i)
n = GetPosition(s, "A", i)
s = Left(s, n - 1) & Replace(s, "A", i & "A", n, 1)
i = i + 1
'Debug.Print s
Loop
Debug.Print s
End Sub
自定义函数GetPosition函数当原字符串中不包括要查找的字符串或次数k超出了出现的次数,就返回0,所以将其作为停止循环的条件。这个函数可以保存下来以后直接用。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel|VBA:instr函数常见用法参考
VBA如何查找字符字符串中某个字符的位置instr()函数
VBA Instr()函数 返回搜索到的字符位置
【烟花原创】VBA零基础之第167篇VBA函数之字符串(三)
ExcelVBA基础课程(3):分隔符
Oracle中的instr()函数 详解及应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服