查找字符串是否在二维VBA Excel数组中

tc_*_*NYC 3 arrays excel vba excel-vba

我有一个很棒的功能,我一直用于一维Excel VBA数组,检查字符串是否在数组中:

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

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

End Function
Run Code Online (Sandbox Code Playgroud)

不幸的是,当它用于检查二维数组时它不起作用,就像我在这里:

Sub new_idea_filter()

home_sheet = ActiveSheet.Name

c = 1

Dim myfilters(1 To 4, 1 To 5000)


myfilters(1, 4) = "Test"

If IsInArray("Test", myfilters()) = True Then
    killer = True
End If



End Sub

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

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

End Function
Run Code Online (Sandbox Code Playgroud)

它在下标超出范围的函数中不断出错,任何人都在考虑如何检查字符串是否在二维数组中?

Sid*_*out 5

我的代码集中的东西

你可以用Application.Match.这将适用于1D2D数组:)

看到这个

Sub Sample()
    Dim myfilters(1 To 4, 1 To 5000)

    myfilters(1, 4) = "Test"

    If IsInArray("Test", myfilters()) = True Then MsgBox "Found"
End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    Dim bDimen As Byte, i As Long

    On Error Resume Next
    If IsError(UBound(arr, 2)) Then bDimen = 1 Else bDimen = 2
    On Error GoTo 0

    Select Case bDimen
    Case 1
        On Error Resume Next
        IsInArray = Application.Match(stringToBeFound, arr, 0)
        On Error GoTo 0
    Case 2
        For i = 1 To UBound(arr, 2)
            On Error Resume Next
            IsInArray = Application.Match(stringToBeFound, Application.Index(arr, , i), 0)
            On Error GoTo 0
            If IsInArray = True Then Exit For
        Next
    End Select
End Function
Run Code Online (Sandbox Code Playgroud)