VBA – Überprüfen Sie, ob eine Array-Variable einen Wert enthält

Letzte Änderung: 5. Oktober 2020 um 13:50 Uhr von Pedro Muxfeldt.

Um zu überprüfen, ob eine Variablentabelle die erforderlichen Daten enthält, können wir alle Elemente dieser Matrix durchgehen, was eine Menge Arbeit bedeuten kann, oder einige spezifische Funktionen dafür verwenden. Wir müssen alle Fehlermöglichkeiten und die Anzahl der Dimensionen unserer Matrixvariablen berücksichtigen.

Verwenden der Match-Funktion

Function EstDans(palavra As String, Tabl) As Boolean
Dim Dimension As Byte, j As Integer

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

Select Case Dimension
    Case 1
        On Error Resume Next
        EstDans = Application.Match(palavra, Tabela, 0)
        On Error GoTo 0
    Case 2
        For j = 1 To UBound(Tabl, 2)
            On Error Resume Next
            EstDans = Application.Match(palavra, Application.Index(Tabela, , j), 0)
            On Error GoTo 0
            If EstDans = True Then Exit For
        Next
End Select
End Function

Prozedur aufrufen

Sub test()
Dim Tb(), i As Integer

'tb 2 dimensions:
Tb = Range("A2:C16").Value
Debug.Print EstDans(MeuValor, Tb)
Erase Tb
'tb 1 dimension:
ReDim Preserve Tb(15)
For i = 0 To 14
    Tb(i) = Cells(i + 2, 1)
Next
Debug.Print EstDans(MaValeur, Tb)
End Sub

Verwenden der Loop-Funktion

Die Struktur dieser Funktion ähnelt der Match-Funktion:

Function LoopNaTabela(mot As String, Tb)
Dim Dimension As Byte, i As Long, j As LongOn Error Resume Next
If IsError(UBound(Tb, 2)) Then Dimension = 1 Else Dimension = 2
On Error GoTo 0

Select Case Dimension
    Case 1
        For j = LBound(Tb) To UBound(Tb)
            If Tb(j) = palavra Then LoopNaTabela = True: Exit Function
        Next
    Case 2
        For i = LBound(Tb, 1) To UBound(Tb, 1)
            For j = LBound(Tb, 2) To UBound(Tb, 2)
                If Tb(i, j) = palavra Then LoopNaTabela = True: Exit Function
            Next j
        Next i
End Select
End Function

Aufführungen

Trotz aller Widrigkeiten Application.Match Bei großen Tischen ist es viel weniger effizient als die Schleife. In Tests:

2-dimensionale Matrixvariable:

Bereich (“A1: Y20002”)

Mit Match: 8.300781 Sekunden

Mit Schleife: 0,4375 Sekunden.

Eindimensionale Matrixvariable:

Mit Match: sofort.

Schleife: 0,015625 Sekunden

In kleinen Tabellenvariablen oder in eindimensionalen Arrayvariablen ist die Funktion mit Application.Match “eleganter” und manchmal sogar schneller. Daher müssen Sie zuerst die zu analysierenden Daten berücksichtigen.