vba抓取网页数据(《函数》逐个判断(二):Instr函数)
优采云 发布时间: 2022-01-07 23:11vba抓取网页数据(《函数》逐个判断(二):Instr函数)
VBA中的Instr函数可以找到指定字符第一次出现的位置,但是有时候需要找到的字符的第N个位置,VBA没有提供可以支持这个功能的函数。
示例:查找字符串 A123-B1234-C12345-D12345 中第三次出现的减号。
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
代码分析:
第四行代码指定查找第三次出现的位置。
第5~13行代码循环判断字符。
第六行确定第 N 个字符是否为减号。
如果满足条件,第 7 行的代码计数器加 1。
第8行代码判断当前位置并指定字符出现的次数。如果满足定位条件,则低9行代码输出信息,第10行代码结束编码过程。
一个一个的判断每个字符是正常的想法,但是如果字符串较长,则需要更多的时间。
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
代码分析:
第三行代码指定了查找第三次出现的位置。
第四行代码 split 函数将字符串拆分为数组。
第 5 到第 7 行的代码是 For 循环。split函数的返回值数组的下标从零开始,因此循环终止值设置为nth_pos-1。
第6行代码循环累加数组元素的字符数,最后加一个相当于一个分隔符。
第 8 行代码输出信息。
使用split函数拆分成数组后,可以有效减少循环次数,提高代码效率。
注意:示例代码中没有容错机制。如果指定的次数超过了被搜索字符在源字符串中出现的次数,则会产生错误结果。