Vba 返回用户定义范围内的行号,而不是绝对行号

Vba 返回用户定义范围内的行号,而不是绝对行号,vba,excel,Vba,Excel,我有范围rngData和数组acoprows()[int] 以下循环用于填充阵列: For Each c In rngData If c.Value = "Search term 1" Then aCopyrow(1) = c.Row ElseIf c.Value = "Search term 2" Then aCopyrow(2) = c.Row ElseIf c.Value = "Search term 3" Then

我有范围
rngData
和数组
acoprows()[int]

以下循环用于填充阵列:

For Each c In rngData

    If c.Value = "Search term 1" Then
        aCopyrow(1) = c.Row
    ElseIf c.Value = "Search term 2" Then
        aCopyrow(2) = c.Row
    ElseIf c.Value = "Search term 3" Then
        aCopyrow(3) = c.Row
    End If

Next c
我希望数组存储与
rngData
对应的行号,或者换句话说:如果在
rngData
的第一行中找到匹配项,则整数1存储在
aCopyrow
中。但是,使用此方法存储该特定单元格的全局行号

感谢您的帮助

rngData.c.Row
只是给了我一个错误(方法不受支持)。

怎么样:

aCopyrow(1) = c.Row  - rngData.Cells(1,1).Row + 1
如果有3个以上的Ifs,您可以这样迭代以使代码更加紧凑:

Dim i as Long

For Each c In rngData

    For i = 1 To 3
        If c.Value = "Search term " & i Then
            aCopyrow(i) = c.Row  - rngData.Cells(1,1).Row + 1
        End If
    Next i

Next c

使用一组数据,速度会快得多:

Dim vArray As Variant

vArray = rngData.Value

For lRow = 1 To UBound(vArray, 1)
    For lCol = 1 To UBound(vArray, 2)
        If vArray(lRow, lCol) = "Search term 1" Then
            aCopyrow(1) = lRow
        ElseIf vArray(lRow, lCol) = "Search term 2" Then
            aCopyrow(2) = lRow
        ElseIf vArray(lRow, lCol) = "Search term 3" Then
            aCopyrow(3) = lRow
        End If
    Next lCol
Next lRow

是否有可能
rngData
可以有多个
搜索项1
搜索项2
搜索项3
?否,搜索项是公司名称,只能出现一次。最后一个问题。这些值位于单个行/列中。i、 e是
rngData
类似于
I13:M13
B1:B100
?请注意,如果得到合适的答案,您应该将问题标记为已解决。谢谢。谢谢你的提示,但是只有三个搜索词。你的解决方案正是我现在正在做的,尽管我觉得有点笨拙。但也许这是唯一的办法,所以谢谢:)