Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: zwei Spalten vergleichen und ggf. kopieren

zwei Spalten vergleichen und ggf. kopieren
Maxel
Hallo zusammen,
ich habe folgendes Problem, welches mich schon einiges an Zeit gekostet hat. Mir liegt eine sehr große Tabelle vor mit knapp 120.000 Einträgen. Datensatz 1 liegt in den Spalten A-Z, Datensatz 2 befindet sich in den Spalten AA-AW.
Verbunden sind diese "Datensätze" über jeweils einen Produktschlüssel, der sich in der Spalte A und AA befindet. Für den Fall, dass die Produktschlüssel übereinstimmen, möchte ich 5 Spalten vom Datensatz 2 in den Datensatz 1 kopieren.
Da meine VBA-Kenntnisse noch sehr bescheiden sind, habe ich nur folgenden Code hinbekommen, der _
einfach zu lange braucht um das Problem zu lösen.

Sub Combine_Produktschlüssel_()
Application.ScreenUpdating = False
For i = 2 To 120000
For j = 2 To 109200
If Cells(i, 1) = Cells(j, 27) Then
Cells(i, 8) = Cells(j, 29)
Cells(i, 9) = Cells(j, 30)
Cells(i, 10) = Cells(j, 32)
Cells(i, 11) = Cells(j, 35)
Cells(i, 12) = Cells(j, 37)
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

Wenn jemand einen Tipp hätte, wie ich das schneller hinbekommen könnte, wäre ich sehr dankbar.
Grüße Maxel
Anzeige

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

Betreff
Benutzer
Anzeige
AW: zwei Spalten vergleichen und ggf. kopieren
12.10.2010 11:25:37
Rudi
Hallo,
im Array dürfte das schneller gehen.
Sub Combine_Produktschlüssel_()
Dim i As Long, j As Long, vntArr1, vntArr2
Application.ScreenUpdating = False
vntArr1 = Range("A2:Z120000")
vntArr2 = Range("AA2: AW120000")
For i = 1 To UBound(vntArr1)
For j = 1 To UBound(vntArr2)
If vntArr1(i, 1) = vntArr2(j, 1) Then
vntArr1(i, 8) = vntArr2(j, 3)
vntArr1(i, 9) = vntArr2(j, 4)
vntArr1(i, 10) = vntArr2(j, 6)
vntArr1(i, 11) = vntArr2(j, 9)
vntArr1(i, 12) = vntArr2(j, 11)
End If
Next j
Next i
Range("A2:Z120000") = vntArr1
Application.ScreenUpdating = True
End Sub

Gruß
Rudi
Anzeige
AW: zwei Spalten vergleichen und ggf. kopieren
12.10.2010 11:57:40
Maxel
vielen Dank Rudi,
im Array braucht das ganze nun nur noch 20% der Zeit :)
AW: zwei Spalten vergleichen und ggf. kopieren
12.10.2010 12:23:23
Rudi
Hallo,
da der Schlüssel ja einmalig sein sollte, ohne 2. Schleife:
Sub Combine_Produktschlüssel_()
Dim i As Long, j, vntArr1, vntArr2
Application.ScreenUpdating = False
vntArr1 = Range("A2:Z120000")
vntArr2 = Range("AA2: AW120000")
For i = 1 To UBound(vntArr1)
j = Application.Match(vntArr1(i, 1), Columns(27), 0)
If Not IsError(j) Then
vntArr1(i, 8) = vntArr2(j - 1, 3)
vntArr1(i, 9) = vntArr2(j - 1, 4)
vntArr1(i, 10) = vntArr2(j - 1, 6)
vntArr1(i, 11) = vntArr2(j - 1, 9)
vntArr1(i, 12) = vntArr2(j - 1, 11)
End If
Next j
Next i
Range("A2:Z120000") = vntArr1
Application.ScreenUpdating = True
End Sub

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zwei Spalten in Excel vergleichen und Daten kopieren


Schritt-für-Schritt-Anleitung

Um zwei Spalten in Excel zu vergleichen und gegebenenfalls Daten zu kopieren, kannst Du folgende Schritte befolgen:

  1. Öffne Deine Excel-Datei und stelle sicher, dass die Daten in den entsprechenden Spalten (A-Z für Datensatz 1 und AA-AW für Datensatz 2) vorhanden sind.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul".

  4. Kopiere den folgenden Code in das Modul:

    Sub Combine_Produktschlüssel_()
       Dim i As Long, j As Long, vntArr1, vntArr2
       Application.ScreenUpdating = False
       vntArr1 = Range("A2:Z120000")
       vntArr2 = Range("AA2:AW120000")
       For i = 1 To UBound(vntArr1)
           j = Application.Match(vntArr1(i, 1), Columns(27), 0)
           If Not IsError(j) Then
               vntArr1(i, 8) = vntArr2(j - 1, 3)
               vntArr1(i, 9) = vntArr2(j - 1, 4)
               vntArr1(i, 10) = vntArr2(j - 1, 6)
               vntArr1(i, 11) = vntArr2(j - 1, 9)
               vntArr1(i, 12) = vntArr2(j - 1, 11)
           End If
       Next i
       Range("A2:Z120000") = vntArr1
       Application.ScreenUpdating = True
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus: Gehe zu "Entwicklertools" > "Makros" und wähle Combine_Produktschlüssel_.


Häufige Fehler und Lösungen

  • Fehler bei der Übereinstimmung: Wenn Du den Fehler "Nicht gefunden" erhältst, stelle sicher, dass die Daten in den Spalten A und AA korrekt formatiert sind (z.B. keine führenden Leerzeichen).

  • Lange Ausführungszeiten: Wenn das Skript zu lange braucht, überprüfe die Anzahl der Einträge. Stelle sicher, dass Du nur die benötigten Zeilen und Spalten in Deinem VBA-Code verwendest.


Alternative Methoden

Du kannst auch Excel-Funktionen wie SVERWEIS oder INDEX und VERGLEICH verwenden, um Daten zu vergleichen und zu kopieren, allerdings sind diese Methoden bei sehr großen Datensätzen weniger performant als die VBA-Lösung.

Beispiel für SVERWEIS:

=SVERWEIS(A2;AA:AW;3;FALSCH)

Füge diese Formel in die Zellen ein, in die Du die Daten kopieren möchtest.


Praktische Beispiele

Angenommen, Du hast folgende Daten:

A B ... Z
Schlüssel Daten1 ... Daten5
1 a ... x
2 b ... y
AA AB ... AW
Schlüssel DatenA ... DatenE
1 c ... z
3 d ... w

Nach Ausführung des Makros werden die Daten aus der zweiten Tabelle, wo die Schlüssel übereinstimmen, in die entsprechenden Zellen in der ersten Tabelle kopiert.


Tipps für Profis

  • Verwende Arrays: Der Einsatz von Arrays in VBA verbessert die Geschwindigkeit erheblich, besonders bei großen Datensätzen, da die Anzahl der Interaktionen mit dem Excel-Blatt reduziert wird.

  • Vermeide die Bildschirmaktualisierung: Durch Application.ScreenUpdating = False kannst Du die Performance weiter steigern, besonders bei umfangreichen Berechnungen.


FAQ: Häufige Fragen

1. Wie viele Zeilen kann ich in Excel verarbeiten? Excel kann bis zu 1.048.576 Zeilen pro Blatt verarbeiten. Stelle sicher, dass Deine VBA-Schleifen nicht darüber hinaus gehen.

2. Funktioniert das auch in Excel Online? Die VBA-Makros funktionieren nur in der Desktop-Version von Excel, nicht in Excel Online.

3. Was mache ich, wenn ich Fehler im VBA-Code habe? Überprüfe die Zeilen sorgfältig auf Syntaxfehler und stelle sicher, dass alle verwendeten Bereiche korrekt sind. Du kannst den Debugger verwenden, um Fehler zu finden.

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