VBA - Überprüfen Sie, ob ein Wert in einem Array vorhanden ist

VBA - Überprüfen Sie, ob ein Wert in einem Array vorhanden ist

Einführung

Um zu überprüfen, ob ein Wert in einem Array vorhanden ist, können wir seine Elemente durchlaufen. Es gibt jedoch eine andere Lösung! Sie können die Excel-eigene Funktion INDEX () verwenden und bei zweidimensionalen Arrays eine Kombination der Funktion INDEX / MATCH verwenden. Wird der Wert jedoch nicht gefunden, gibt Application.Match einen Fehler zurück. Sie müssen alle möglichen Fehler sowie die Anzahl der Dimensionen der Arrayvariablen berücksichtigen.

Diese kleine Funktion hilft Ihnen dabei!

Verwenden der Match-Funktion

 Funktion EstDans (mot As String, Tabl) As Boolean

Dim Dimension As Byte, j As Integer

On Error Resume Weiter

If IsError (UBound (Tabl, 2)) Then Dimension = 1 Else Dimension = 2

Bei Fehler Gehe zu 0

Wählen Sie Falldimension

Fall 1

On Error Resume Weiter

EstDans = Application.Match (mot, Tabl, 0)

Bei Fehler Gehe zu 0

Fall 2

Für j = 1 bis UBound (Tabl, 2)

On Error Resume Weiter

EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)

Bei Fehler Gehe zu 0

Wenn EstDans = True, dann beenden Sie für

Nächster

Ende auswählen

Funktion beenden

Aufrufen der Funktion

 Untertest ()

Dim Tb (), i As Integer

2 Dimensionen:

Tb = Bereich ("A2: C16"). Wert

Debug.Print EstDans (MaValeur, Tb)

Tb löschen

'tb 1 dimension:

ReDim Preserve Tb (15)

Für i = 0 bis 14

Tb (i) = Zellen (i + 2, 1)

Nächster

Debug.Print EstDans (MaValeur, Tb)

End Sub

Mit einer Schleife

Die Struktur dieser Funktion ähnelt der mit Match .

 Funktion BoucleSurTabl (mot As String, Tb)

Dim Dimension As Byte, i As Long, j As Long

On Error Resume Weiter

If IsError (UBound (Tb, 2)) Then Dimension = 1 Else Dimension = 2

Bei Fehler Gehe zu 0

Wählen Sie Falldimension

Fall 1

Für j = LBound (Tb) zu UBound (Tb)

Wenn Tb (j) = mot, dann BoucleSurTabl = True: Exit Function

Nächster

Fall 2

For i = LBound (Tb, 1) To UBound (Tb, 1)

Für j = LBound (Tb, 2) Zu UBound (Tb, 2)

Wenn Tb (i, j) = mot, dann BoucleSurTabl = True: Exit Function

Weiter j

Weiter i

Ende auswählen

Funktion beenden

Beobachtungen

Bei allen Widrigkeiten erzielen Sie mit der Schleifenfunktion bei großen Arrays ein besseres Ergebnis als mit Application.Match.

Testen eines zweidimensionalen Arrays mit dem folgenden Bereich ("A1: Y20002").

  • Verwenden der Match-Funktion: 8.300781 Sekunden.
  • Verwenden der Schleife: 0, 4375 Sekunden.

Testen eines eindimensionalen Arrays:

  • Verwenden der Match-Funktion: sofort
  • Verwenden der Schleife: 0, 015625 Sekunden

Download-Link

  • Sie können die Beispielarbeitsmappe herunterladen: //cjoint.com/?DHfpeqMBvRK
Vorherige Artikel Nächster Artikel

Top-Tipps