2012-03-28 43 views
2

我有范围rngData和数组aCopyrows() [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只是给了我一个错误(方法不支持)。

+0

有没有可能'rngData'可以有多个'搜索项1'或'搜索项2'或'搜索项3'? – 2012-03-28 09:05:33

+0

不,搜索条件是公司名称,只能出现一次。 – beerskij 2012-03-28 12:02:07

+0

最后一个问题。这些值是否在单个行/列中。即''rngData'就像'I13:M13'或'B1:B100'? – 2012-03-28 12:38:03

回答

1

如何:

aCopyrow(1) = c.Row - rngData.Cells(1,1).Row + 1 

,如果有3个以上的如果,你能重复这样使代码更紧凑:

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 
+0

感谢您的提示,但只有三个搜索条件。你的解决方案与我现在所做的一样,尽管我觉得它有点笨拙。但也许这是唯一的方法,所以谢谢:) – beerskij 2012-03-28 12:04:29

0

使用数据的阵列,它会快很多:

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