VBA中的Instr函数可以查找指定字符首次出现的位置,但是有时需要查找的字符第N此出现的位置,VBA并没有提供可以支持这个功能的函数。
实例:查找字符串A123-B1234-C12345-D12345
中减号第3次出现的位置。
Sub Demo1()msg = "A123-B1234-C12345-D12345"cnt = 0nth_pos = 3For i = 1 To Len(msg)If Mid(msg, i, 1) = "-" Thencnt = cnt + 1If cnt = nth_pos ThenMsgBox "定位位置:" & iExit SubEnd IfEnd IfNext
End Sub
代码解析:
第4行代码指定查找第3次出现的位置。
第5~13行代码循环判断个字符。
第6行判断第N个字符是否为减号。
如果满足条件,第7行代码计数器加一。
第8行代码判断到当前位置,指定字符出现的次数,如果恰好满足定位条件,那么低9行代码输出信息,第10行代码结束代码过程。
逐个判断每个字符是常规思路,但是如果字符串较长,那么耗时也就比较多,
Sub Demo2()msg = "A123-B1234-C12345-D12345"nth_pos = 3arr = Split(msg, "-")For i = 0 To nth_pos - 1cnt = cnt + Len(arr(i)) + 1NextMsgBox "定位位置:" & cnt
End Sub
代码解析:
第3行代码指定查找第3次出现的位置。
第4行代码split函数将字符串拆分为数组。
第5~7行代码为For循环,split函数返回值数组的下标下届是从零开始的,因此循环终止值设置为nth_pos-1
。
第6行代码循环累计数组元素字符个数,最后加一相当于是分隔符。
第8行代码输出信息。
使用split函数拆分为数组之后,可以有效的减少循环次数,提升代码效率。
注意:示例代码中并没有容错机制,如果指定次数超过源字符串中被查找字符出现的次数,那么将产生错误结果。
本文发布于:2024-01-29 15:42:50,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170651417716329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |