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 BooleanDim 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