定位指定字符在字符串中第N次出现的位置

83 篇文章 6 订阅
59 篇文章 2 订阅

VBA中的Instr函数可以查找指定字符首次出现的位置,但是有时需要查找的字符第N此出现的位置,VBA并没有提供可以支持这个功能的函数。

实例:查找字符串A123-B1234-C12345-D12345中减号第3次出现的位置。

在这里插入图片描述


  • 方法1:
Sub Demo1()
    msg = "A123-B1234-C12345-D12345"
    cnt = 0
    nth_pos = 3
    For i = 1 To Len(msg)
        If Mid(msg, i, 1) = "-" Then
            cnt = cnt + 1
            If cnt = nth_pos Then
                MsgBox "定位位置:" & i
                Exit Sub
            End If
        End If
    Next
End Sub

代码解析:
第4行代码指定查找第3次出现的位置。
第5~13行代码循环判断个字符。
第6行判断第N个字符是否为减号。
如果满足条件,第7行代码计数器加一。
第8行代码判断到当前位置,指定字符出现的次数,如果恰好满足定位条件,那么低9行代码输出信息,第10行代码结束代码过程。

逐个判断每个字符是常规思路,但是如果字符串较长,那么耗时也就比较多,


  • 方法2:
Sub Demo2()
    msg = "A123-B1234-C12345-D12345"
    nth_pos = 3
    arr = Split(msg, "-")
    For i = 0 To nth_pos - 1
        cnt = cnt + Len(arr(i)) + 1
    Next
    MsgBox "定位位置:" & cnt
End Sub

代码解析:
第3行代码指定查找第3次出现的位置。
第4行代码split函数将字符串拆分为数组。
第5~7行代码为For循环,split函数返回值数组的下标下届是从零开始的,因此循环终止值设置为nth_pos-1
第6行代码循环累计数组元素字符个数,最后加一相当于是分隔符。
第8行代码输出信息。

在这里插入图片描述

使用split函数拆分为数组之后,可以有效的减少循环次数,提升代码效率。

注意:示例代码中并没有容错机制,如果指定次数超过源字符串中被查找字符出现的次数,那么将产生错误结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值