Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: 2 Arrays vergleichen

VBA: 2 Arrays vergleichen
15.12.2016 10:08:36
Sven
Hallo Zusammen,
ich stehe aktuell vor folgendem Problem. Ich habe 2 Arrays die sich wie folgt gestalten:
array1 = ("Apfel", "Banane", "Cranberrys", "Datteln", "Erdbeeren", "Feigen", usw...")
array2 = ("Feigen", "Apfel", "Erdbeeren", "Cranberrys", "Datteln", usw...")

Nun möchte ich prüfen, an welchem Index ein Wert aus Array1 in Array2 steht.
z.B.:
Feigen befindet sich in array1 unter Index 5(array1(5)) und in array2 unter Index 0 (array2(0))
Banane befindet sich in array1 unter Index 5 und ist nicht in array2 enthalten.
Aktuell durchlaufe ich beide Arrays mit einer Schleife:
for i = lbound(array1) to ubound(array1)
for j = lbound(array2) to ubound(array2)
if array(i) = array(j) then
x = "gefunden"
exit for
else
x = "nicht gefunden"
end if
next
next

Da sich in beiden Arrays jedoch ein Datenpool von ca. 40000 Sätzen befinden können, ist die Schleifenlösung seh zeitintensiv. Gibt es hier eine bessere bzw. schnellere Möglichkeit die Arrays zu analysieren?
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: 2 Arrays vergleichen
15.12.2016 10:12:09
Sven
nochmals als Code formattiert:

for i = lbound(array1) to ubound(array1)
for j = lbound(array2) to ubound(array2)
if array(i) = array(j) then
x = "gefunden"
exit for
else
x = "nicht gefunden"
end if
next
next

AW: VBA: 2 Arrays vergleichen
15.12.2016 10:23:20
ChrisL
Hi Sven
Eine Idee...
Application.Match()
=VERGLEICH()
lässt sich auch auf ein Array anwenden.
cu Chris
Anzeige
AW: VBA: 2 Arrays vergleichen
15.12.2016 10:47:54
Sven
Boah, saustark! Getestet und funktioniert... Vielen Dank!

Sub x()
Dim a As Variant
Dim b As Variant
a = Array("A", "B", "C", "D", "E", "F", "G")
b = Array("F", "A", "E", "B", "C")
On Error Resume Next
MsgBox WorksheetFunction.Match(a(2), b, 0)
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

2 Arrays vergleichen in VBA


Schritt-für-Schritt-Anleitung

Um zwei Arrays in VBA zu vergleichen, kannst du die folgenden Schritte befolgen:

  1. Arrays definieren: Erstelle zwei Arrays, die die Werte enthalten, die du vergleichen möchtest.

    Dim array1 As Variant
    Dim array2 As Variant
    array1 = Array("Apfel", "Banane", "Cranberrys", "Datteln", "Erdbeeren", "Feigen")
    array2 = Array("Feigen", "Apfel", "Erdbeeren", "Cranberrys", "Datteln")
  2. Schleife implementieren: Verwende eine verschachtelte Schleife, um jedes Element von array1 mit jedem Element von array2 zu vergleichen.

    Dim i As Long, j As Long
    Dim x As String
    
    For i = LBound(array1) To UBound(array1)
        For j = LBound(array2) To UBound(array2)
            If array1(i) = array2(j) Then
                x = "gefunden"
                Exit For
            Else
                x = "nicht gefunden"
            End If
        Next j
    Next i
  3. Ergebnis anzeigen: Nutze eine MsgBox oder eine andere Methode, um das Ergebnis anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Überprüfe, ob die Indizes innerhalb der Grenzen der Arrays liegen. Verwende LBound und UBound für eine sichere Iteration.
  • Fehler: "Type mismatch"

    • Stelle sicher, dass die Arrays korrekt deklariert sind und die richtigen Datentypen enthalten.

Alternative Methoden

Eine effiziente Methode zum Vergleichen von Arrays ist die Verwendung von Application.Match(). Diese Funktion kann auch auf Arrays angewendet werden und ist schneller als eine Schleifenlösung.

Sub CompareArrays()
    Dim a As Variant
    Dim b As Variant
    a = Array("A", "B", "C", "D", "E", "F", "G")
    b = Array("F", "A", "E", "B", "C")

    On Error Resume Next
    MsgBox WorksheetFunction.Match(a(2), b, 0) ' Vergleicht das Element von a(2) in b
End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie du die Ergebnisse für mehrere Werte gleichzeitig überprüfen kannst:

Sub CompareMultiple()
    Dim array1 As Variant
    Dim array2 As Variant
    Dim i As Long

    array1 = Array("Apfel", "Banane", "Cranberrys")
    array2 = Array("Banane", "Datteln", "Erdbeeren")

    For i = LBound(array1) To UBound(array1)
        If Not IsError(Application.Match(array1(i), array2, 0)) Then
            Debug.Print array1(i) & " gefunden in array2!"
        Else
            Debug.Print array1(i) & " nicht gefunden."
        End If
    Next i
End Sub

Tipps für Profis

  • Überlege, ob du die Arrays vor dem Vergleich sortieren kannst. Das kann die Performance verbessern, besonders bei großen Datensätzen.
  • Nutze Dictionary-Objekte, um die Suche zu optimieren, wenn du viele Werte vergleichen musst. Dictionaries bieten eine schnellere Lookup-Zeit als Arrays.

FAQ: Häufige Fragen

1. Wie kann ich die Größe eines Arrays in VBA ändern?
VBA-Arrays sind statisch, sobald sie deklariert sind. Du kannst jedoch ReDim verwenden, um die Größe eines Arrays zu ändern.

2. Kann ich Arrays in VBA direkt vergleichen?
Nein, du musst die Elemente der Arrays einzeln vergleichen, da VBA keinen direkten Array-Vergleich unterstützt.

3. Wie kann ich prüfen, ob ein Wert in einem Array vorhanden ist?
Verwende die Application.Match()-Funktion oder durchlaufe das Array mit einer Schleife, um die Existenz eines Wertes zu überprüfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige