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:
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Gehe zu
Einfügen
> Modul
, um ein neues Modul zu erstellen.
- 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
- Schließe den VBA-Editor und kehre zu deinem Excel-Arbeitsblatt zurück.
- 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.