【发布时间】:2016-06-22 19:38:30
【问题描述】:
我有 2 个数组:一个具有用于在文档中搜索 (arr) 的值,另一个将放入相关单元格地址与找到的值 (arr2)。我对arr 没有任何问题,并且之前在我的代码中成功使用过它。
使用arr2,我想找到包含arr 中的值的任何单元格,并将单元格地址lRow 从它向下添加到arr2,但前提是该地址不是已经在arr2。
我找到了 2 个 SO 答案,我正在尝试结合这些答案来解决我的问题,但到目前为止还没有运气。
Excel VBA - adding an element to the end of an array
How to search for string in an array
我的代码如下:
Sub Initiate()
Dim arr(3) As Variant
arr(0) = "Value1"
arr(1) = "Value2"
arr(2) = "Value3"
arr(3) = "Value4"
Dim arr2() As Variant
Dim Alc as String
Dim lRow as Long
Dim fVal as String
lRow = Activesheet.Cells(Activesheet.Rows.Count, 1).End(xlUp).Row
For Each element In arr
fVal = element
Set fRange = WA.Cells.Find(What:=fVal, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
While Not fRange Is Nothing
While Not IsInArray(fRange.Offset(lRow - 6, 0).Address(False, False), arr2)
ReDim Preserve arr2(0 To UBound(arr2) + 1) As Variant
arr2(UBound(arr2)) = fRange.Offset(lRow - 6, 0).Address(False, False)
Set fRange = WA.Cells.Find(What:=fVal, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Wend
Wend
Next element
Alc = "="
For Each element In arr2
Alc = Alc & element & "+"
Next element
Alc = Left(Alc, Len(Alc) - 1)
MsgBox Alc
End Sub
Function IsInArray(stringToBeFound As String, arr2 As Variant) As Boolean
IsInArray = (UBound(Filter(arr2, stringToBeFound)) > -1)
End Function
运行时出现以下错误:
在这行代码上(IsInArray 函数内):
IsInArray = (UBound(Filter(arr2, stringToBeFound)) > -1)
非常感谢任何帮助!
【问题讨论】:
-
你有没有考虑用字典来代替
arr2。如果将唯一值存储为键,则可以相对轻松地防止重复。