我的问题实际上涉及到一个扩展的问题,即如何在 EXCEL VBA中将搜索结果存储在数组中?
在这里,Andreas试图通过搜索列并将命中保存到数组中来解决问题。我也在尝试同样的事情。但是与此不同的是,在(1)找到值后,(2)我想要从(3)与搜索到的值所在行相同的单元格中复制不同类型的值,(4)到一个二维数组中。
因此,这个数组在概念上会看起来像:
我使用的代码如下:
似乎在循环中重新调整数组大小出了问题。我收到了一个下标超出范围的错误。我猜我不能像现在这样重新定义数组大小,但我想不出应该如何完成它。
如果有任何线索可以告诉我我做错了什么,我将不胜感激。
因此,这个数组在概念上会看起来像:
Searchresult.1st SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Searchresult.2nd SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Searchresult.3rd SameRow.Cell1.Value1 SameRow.Cell2.Value2 SameRow.Cell3.Value3
Etc.
我使用的代码如下:
Sub fillArray()
Dim i As Integer
Dim aCell, bCell As Range
Dim arr As Variant
i = 0
Set aCell = Sheets("Log").UsedRange.Find(What:=("string"), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
ReDim Preserve arr(i, 5)
arr(i, 0) = True 'Boolean
arr(i, 1) = aCell.Value 'String
arr(i, 2) = aCell.Cells.Offset(0, 1).Value
arr(i, 3) = aCell.Cells.Offset(0, 3).Value
arr(i, 4) = aCell.Cells.Offset(0, 4).Value
arr(i, 5) = Year(aCell.Cells.Offset(0, 3).Value)
i = i + 1
Do While exitLoop = False
Set aCell = Sheets("Log").UsedRange.FindNext(after:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
'ReDim Preserve arrSwUb(i, 5)
arr(i, 0) = True
arr(i, 1) = aCell.Value
arr(i, 2) = aCell.Cells.Offset(0, 1).Value
arr(i, 3) = aCell.Cells.Offset(0, 3).Value
arr(i, 4) = aCell.Cells.Offset(0, 4).Value
arr(i, 5) = Year(aCell.Cells.Offset(0, 3).Value)
i = i + 1
Else
exitLoop = True
End If
Loop
End If
End Sub
似乎在循环中重新调整数组大小出了问题。我收到了一个下标超出范围的错误。我猜我不能像现在这样重新定义数组大小,但我想不出应该如何完成它。
如果有任何线索可以告诉我我做错了什么,我将不胜感激。