Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 2 Arrays vergleichen

2 Arrays vergleichen
Micha
Hi Leute,
ich habe zwei Arrays mit jeweils 4stelligen Strings als Elemente.
Natürlich wild durcheinander gemixt :-)
Ich will diese nun vergleichen und die Ergebnisse speichern (optimal wären drei Arrays - siehe unten)
So einige Elemente sind in beiden gleich andere sind nur im ersten und wiederum andere nur im zweiten Array.
Optimal wäre die Lösung mit drei Ergebniss Arrays:
arrEqu - wäre das Array mit den Elementen die in beiden Arrays vorkommen
arrDif1 - ist das Array das nur Elemente enthält die nur im ersten Array vorkommen
arrDif2 - ist das Array das nur Elemente enthält die nur im zweiten Array vorkommen
Gibts da was praktikables?
Danke für eure Lösungsvorschläge.
Micha
Anzeige

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

Betreff
Benutzer
Anzeige
AW: 2 Arrays vergleichen
09.02.2010 10:33:56
Ramses
Hallo
Quick und Dirty und wenn es schnell gehen muss:
Ich würde 3 Schleifen initieren, die Arrays durchlaufen und je nach Ergebnis die Werte in eines der drei Array schreiben.
Gruss Rainer
AW: 2 Arrays vergleichen
09.02.2010 14:20:09
fcs
Hallo Micha,
hier ein Beispiel mit benutzerdefinierter Funktion. Dürfte bei großeren Arrays etwas schneller sein, als die Arrays komplett in For-Next-Schleifen abzuarbeiten und zu vergleichen. Mehrfach vorkommende Einträge werden in den Ergebnis-Arrays immer nur einmal gelistet.
Gruß
Franz
Sub aaTest()
'Vergleich zweier Daten-Arrays - Erstellt unter Excel 2003
Dim iLfdNr As Long, Zeile As Long, Spalte As Long
Dim arrEqu, arrDif1, arrDif2, arrA, arrB
'Beispieldaten
arrA = Array("AB01", "AB06", "AB05", "AB04", "AB07", "AB03", "AB02", "AB07", "AB03")
arrB = Array("AB01", "AB05", "AB07", "AB03", "AB08", "AB09", "AB10", "AB09")
'benutzerdefinierte Funktion zum Array-Vergleich aufrufen
Call ArrayVergleich(arr01:=arrA, arr02:=arrB, _
arrIn01u02:=arrEqu, _
arrNurin01:=arrDif1, _
arrNurin02:=arrDif2)
'Ergebnis-Arrays ausgeben
Zeile = 1: Spalte = 3
Cells(Zeile, Spalte).Value = "Nur in Array 1"
If IsArray(arrDif1) Then
For iLfdNr = LBound(arrDif1) To UBound(arrDif1)
Zeile = Zeile + 1
Cells(Zeile, Spalte).Value = arrDif1(iLfdNr)
Next
End If
Zeile = 1: Spalte = 4
Cells(Zeile, Spalte).Value = "Nur in Array 2"
If IsArray(arrDif2) Then
For iLfdNr = LBound(arrDif2) To UBound(arrDif2)
Zeile = Zeile + 1
Cells(Zeile, Spalte).Value = arrDif2(iLfdNr)
Next
End If
Zeile = 1: Spalte = 5
Cells(Zeile, Spalte).Value = "beiden Arrays"
If IsArray(arrEqu) Then
For iLfdNr = LBound(arrEqu) To UBound(arrEqu)
Zeile = Zeile + 1
Cells(Zeile, Spalte).Value = arrEqu(iLfdNr)
Next
End If
End Sub
Function ArrayVergleich(arr01, arr02, arrIn01u02, arrNurin01, arrNurin02)
'Vergleich zweier Daten-Arrays - Erstellt unter Excel 2003
Dim iLfdNr As Long, iIndex As Long, iIndexDoppelt As Long
Dim arrBeide(), arrNur1(), arrNur2(), iBeide As Long, iNur1 As Long, iNur2 As Long
On Error Resume Next 'Wenn "Match" Fehler ergibt.
'Array1 mit Array2 abgleichen
For iLfdNr = LBound(arr01) To UBound(arr01)
iIndex = 0: iIndexDoppelt = 0
iIndex = Application.WorksheetFunction.Match(arr01(iLfdNr), arr02, 0)
If iIndex > 0 Then
iIndexDoppelt = Application.WorksheetFunction.Match(arr01(iLfdNr), arrBeide, 0)
If iIndexDoppelt = 0 Then
iBeide = iBeide + 1
ReDim Preserve arrBeide(1 To iBeide)
arrBeide(iBeide) = arr01(iLfdNr)
End If
Else
iIndexDoppelt = Application.WorksheetFunction.Match(arr01(iLfdNr), arrNur1, 0)
If iIndexDoppelt = 0 Then
iNur1 = iNur1 + 1
ReDim Preserve arrNur1(1 To iNur1)
arrNur1(iNur1) = arr01(iLfdNr)
End If
End If
Next
'Array2 mit Array1 abgleichen
For iLfdNr = LBound(arr02) To UBound(arr02)
iIndex = 0: iIndexDoppelt = 0
iIndex = Application.WorksheetFunction.Match(arr02(iLfdNr), arr01, 0)
iIndexDoppelt = Application.WorksheetFunction.Match(arr02(iLfdNr), arrNur2, 0)
If iIndex = 0 And iIndexDoppelt = 0 Then
iNur2 = iNur2 + 1
ReDim Preserve arrNur2(1 To iNur2)
arrNur2(iNur2) = arr02(iLfdNr)
End If
Next
'Ergebnis-Arrays zurückgeben
If iBeide > 0 Then arrIn01u02 = arrBeide
If iNur1 > 0 Then arrNurin01 = arrNur1
If iNur2 > 0 Then arrNurin02 = arrNur2
ReDim arrBeide(0): ReDim arrNur1(0): ReDim arrNur2(0)
End Function

Anzeige
AW: 2 Arrays vergleichen
15.02.2010 11:21:53
Micha
Vielen Dank! :-)
;
Anzeige
Anzeige

Infobox / Tutorial

Zwei Arrays in Excel vergleichen und Ergebnisse speichern


Schritt-für-Schritt-Anleitung

Um zwei Arrays in Excel zu vergleichen und die Ergebnisse in drei verschiedene Arrays zu speichern, kannst du die folgende benutzerdefinierte VBA-Funktion verwenden. Diese Methode eignet sich besonders gut für komplexe Datenanalysen und ist effizienter als die Verwendung von For-Next-Schleifen. Hier sind die Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den unten stehenden Code in das Modul:
Sub aaTest()
    'Vergleich zweier Daten-Arrays - Erstellt unter Excel 2003
    Dim iLfdNr As Long, Zeile As Long, Spalte As Long
    Dim arrEqu, arrDif1, arrDif2, arrA, arrB
    'Beispieldaten
    arrA = Array("AB01", "AB06", "AB05", "AB04", "AB07", "AB03", "AB02", "AB07", "AB03")
    arrB = Array("AB01", "AB05", "AB07", "AB03", "AB08", "AB09", "AB10", "AB09")
    'benutzerdefinierte Funktion zum Array-Vergleich aufrufen
    Call ArrayVergleich(arr01:=arrA, arr02:=arrB, _
    arrIn01u02:=arrEqu, _
    arrNurin01:=arrDif1, _
    arrNurin02:=arrDif2)

    'Ergebnis-Arrays ausgeben
    Zeile = 1: Spalte = 3
    Cells(Zeile, Spalte).Value = "Nur in Array 1"
    If IsArray(arrDif1) Then
        For iLfdNr = LBound(arrDif1) To UBound(arrDif1)
            Zeile = Zeile + 1
            Cells(Zeile, Spalte).Value = arrDif1(iLfdNr)
        Next
    End If
    Zeile = 1: Spalte = 4
    Cells(Zeile, Spalte).Value = "Nur in Array 2"
    If IsArray(arrDif2) Then
        For iLfdNr = LBound(arrDif2) To UBound(arrDif2)
            Zeile = Zeile + 1
            Cells(Zeile, Spalte).Value = arrDif2(iLfdNr)
        Next
    End If
    Zeile = 1: Spalte = 5
    Cells(Zeile, Spalte).Value = "beiden Arrays"
    If IsArray(arrEqu) Then
        For iLfdNr = LBound(arrEqu) To UBound(arrEqu)
            Zeile = Zeile + 1
            Cells(Zeile, Spalte).Value = arrEqu(iLfdNr)
        Next
    End If
End Sub

Function ArrayVergleich(arr01, arr02, arrIn01u02, arrNurin01, arrNurin02)
    'Vergleich zweier Daten-Arrays - Erstellt unter Excel 2003
    Dim iLfdNr As Long, iIndex As Long, iIndexDoppelt As Long
    Dim arrBeide(), arrNur1(), arrNur2(), iBeide As Long, iNur1 As Long, iNur2 As Long
    On Error Resume Next 'Wenn "Match" Fehler ergibt.

    'Array1 mit Array2 abgleichen
    For iLfdNr = LBound(arr01) To UBound(arr01)
        iIndex = 0: iIndexDoppelt = 0
        iIndex = Application.WorksheetFunction.Match(arr01(iLfdNr), arr02, 0)
        If iIndex > 0 Then
            iIndexDoppelt = Application.WorksheetFunction.Match(arr01(iLfdNr), arrBeide, 0)
            If iIndexDoppelt = 0 Then
                iBeide = iBeide + 1
                ReDim Preserve arrBeide(1 To iBeide)
                arrBeide(iBeide) = arr01(iLfdNr)
            End If
        Else
            iIndexDoppelt = Application.WorksheetFunction.Match(arr01(iLfdNr), arrNur1, 0)
            If iIndexDoppelt = 0 Then
                iNur1 = iNur1 + 1
                ReDim Preserve arrNur1(1 To iNur1)
                arrNur1(iNur1) = arr01(iLfdNr)
            End If
        End If
    Next

    'Array2 mit Array1 abgleichen
    For iLfdNr = LBound(arr02) To UBound(arr02)
        iIndex = 0: iIndexDoppelt = 0
        iIndex = Application.WorksheetFunction.Match(arr02(iLfdNr), arr01, 0)
        iIndexDoppelt = Application.WorksheetFunction.Match(arr02(iLfdNr), arrNur2, 0)
        If iIndex = 0 And iIndexDoppelt = 0 Then
            iNur2 = iNur2 + 1
            ReDim Preserve arrNur2(1 To iNur2)
            arrNur2(iNur2) = arr02(iLfdNr)
        End If
    Next

    'Ergebnis-Arrays zurückgeben
    If iBeide > 0 Then arrIn01u02 = arrBeide
    If iNur1 > 0 Then arrNurin01 = arrNur1
    If iNur2 > 0 Then arrNurin02 = arrNur2
    ReDim arrBeide(0): ReDim arrNur1(0): ReDim arrNur2(0)
End Function
  1. Schließe den VBA-Editor und kehre zu deinem Excel-Arbeitsblatt zurück.
  2. Führe das Makro aaTest aus, um die Ergebnisse der beiden Arrays in den Zellen anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler beim Ausführen des Makros: Überprüfe, ob das Makro in einer Excel-Datei gespeichert ist, die Makros unterstützt (z.B. .xlsm).
  • Die Ergebnisse erscheinen nicht: Stelle sicher, dass die Arrays korrekt definiert sind und dass du die richtige Zelle als Startpunkt für die Ausgabe gewählt hast.
  • Problem mit mehrfachen Einträgen: Die benutzerdefinierte Funktion reduziert die Ausgabe auf eindeutige Werte. Falls du alle Vorkommen haben möchtest, musst du die Logik anpassen.

Alternative Methoden

Eine einfache Alternative besteht darin, Excel-Funktionen wie VERGLEICH oder SVERWEIS zu verwenden, um die Werte zu vergleichen, allerdings ist diese Methode weniger effizient bei großen Arrays und kann nicht direkt in separate Arrays zurückgeben. VBA ist hier die bessere Wahl.


Praktische Beispiele

Angenommen, du hast zwei Arrays:

  • arrA = Array("AB01", "AB02", "AB03")
  • arrB = Array("AB02", "AB03", "AB04")

Mit dem obigen Makro erhältst du:

  • arrEqu = Array("AB02", "AB03")
  • arrDif1 = Array("AB01")
  • arrDif2 = Array("AB04")

Tipps für Profis

  • Nutze die Möglichkeit, die Arrays direkt in einer Excel-Tabelle zu speichern. So kannst du die Ergebnisse einfacher verwalten und analysieren.
  • Experimentiere mit der Anpassung der benutzerdefinierten Funktion, um sie an deine spezifischen Bedürfnisse anzupassen.
  • Verwende Error-Handling in VBA, um die Robustheit deines Codes zu erhöhen.

FAQ: Häufige Fragen

1. Kann ich das Makro auch in Excel 2010 oder neuer verwenden? Ja, der Code ist mit Excel 2003 erstellt, funktioniert aber auch in neueren Versionen.

2. Was ist der Vorteil der Verwendung von VBA gegenüber Excel-Funktionen? VBA ermöglicht eine robustere und flexiblere Datenverarbeitung, insbesondere bei größeren Datenmengen. Es erlaubt das Erstellen von benutzerdefinierten Funktionen, die direkt auf deine spezifischen Anforderungen abgestimmt sind.

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