如何在字符串数组中搜索指定子串?附示例代码及问题咨询
解决VBA中搜索子串并获取数组元素下标的问题
看起来你的代码里有几个语法和逻辑上的小问题,我来帮你修正并实现你想要的功能——找到包含指定子串的数组元素的下标,而不是元素本身。
首先,先梳理下你的代码里的核心问题:
- 循环语句语法错误:
For a(i) to 3是无效写法,VBA的For循环需要明确遍历的下标范围,应该写成For i = 1 To 数组长度 - 存储内容不符合需求:你现在写的
b(j) = a(i)是把匹配到的元素值存到数组b里,但你要的是元素的下标,所以应该改成b(j) = i - 可选优化:最好提前初始化存储下标的数组,避免出现下标越界的问题
接下来是修正后的完整可运行代码:
Sub FindSubstringIndex() ' 初始化原数组 Dim a(1 To 3) As String a(1) = "Blue" a(2) = "Red" a(3) = "Orange" Dim word As String word = "Or" Dim i As Integer, j As Integer i = 1 j = 1 ' 初始化存储下标的数组,长度和原数组一致(兼容所有元素都匹配的情况) Dim b(1 To 3) As Integer ' 正确遍历原数组的每个下标 For i = 1 To 3 ' InStr函数返回子串的起始位置,返回值>0表示找到匹配 If InStr(a(i), word, 1) <> 0 Then ' 存储匹配元素的下标,而非元素值 b(j) = i j = j + 1 End If Next i ' 输出所有匹配的下标 For i = 1 To j - 1 Debug.Print "匹配的下标:" & b(i) Next i End Sub
关键修改点说明:
- 循环逻辑修正:
For i = 1 To 3正确遍历数组a的每个元素下标,确保不会遗漏任何元素 - 存储目标调整:
b(j) = i把当前匹配元素的下标存入数组b,这样就能得到你期望的结果3 - 结果输出优化:最后通过循环打印数组b里的有效下标(j会在每次匹配后自增,所以有效元素范围是1到j-1)
运行这段代码后,你会在VBA的立即窗口看到输出:匹配的下标:3,完全符合你的需求。
如果你的数组长度不固定,还可以用UBound(a)动态获取数组上界,把循环改成For i = LBound(a) To UBound(a),让代码适配任意长度的数组。
内容的提问来源于stack exchange,提问作者curiousone
相关产品推荐
相关产品推荐

