添加到数组并在数组中查找值

The*_*uch 4 excel vba excel-vba

我有2个数组:一个具有搜索文档的值为(arr),另一个将使用找到的值(arr2)放入相关的单元格地址.我没有问题arr,并在我的代码中成功使用它.

有了arr2,我想找到包含值的任何单元格,arr并将单元格地址lRow的行数向下添加到arr2,但仅限于该地址尚未包含在内arr2.

为了解决我的问题,我找到了2个我想要结合的答案,但到目前为止还没有运气.

Excel VBA - 在数组末尾添加元素

如何在数组中搜索字符串

我的代码如下:

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
Run Code Online (Sandbox Code Playgroud)

运行时,我收到以下错误:

在此输入图像描述

在这行代码上(在IsInArray函数内):

IsInArray = (UBound(Filter(arr2, stringToBeFound)) > -1)

任何帮助是极大的赞赏!

Tim*_*ams 6

我不喜欢使用Filter,因为它也匹配子字符串,而且通常不是你想要的

Function IsInArray(stringToBeFound As String, arr2 As Variant) As Boolean

    IsInArray = Not IsError(Application.Match(stringToBeFound, arr2, 0))

End Function
Run Code Online (Sandbox Code Playgroud)

也:

ReDim Preserve arr2(0 To UBound(arr2) + 1) As Variant
Run Code Online (Sandbox Code Playgroud)

应该是:

ReDim Preserve arr2(0 To UBound(arr2) + 1)
Run Code Online (Sandbox Code Playgroud)