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

Spalte A und B vergleichen und Zeilen kopieren

Forumthread: Spalte A und B vergleichen und Zeilen kopieren

Spalte A und B vergleichen und Zeilen kopieren
09.08.2015 20:58:09
Anna
Hallo zusammen,
ich möchte gerne die Spalte A des Tabellenblattes "Kunden" mit der Spalte B des Tabellenblattes "Tabelle3" vergleichen.
Wenn es übereinstimmungen gibt soll die jeweilige Zeile(C:H) von Tabelle 3 in die Tabelle "Kunden" (G:H) kopiert werden.
Die Tabelle "Kunden" hat etwa 30000 Einträge, die Tabelle3 nur etwa 4000.
Beim Durchlaufen des Codes kommt der Fehler: "Anwendungs- oder objektdefinierter Fehler".
Public Function Zeilen_vergleichen()
Worksheets("Kunden").Activate
Range("A4").Select
Endi = Range("A65536").End(xlUp).Row
Worksheets("Tabelle3").Activate
Range("B2").Select
Endj = Range("A65536").End(xlUp).Row
For i = 1 To Endi
For j = 1 To Endj
If Worksheets("Kunden").Range("A" & i) = Worksheets("Tabelle3").Range("B" & j) Then
Worksheets("Tabelle3").Range(Cells(2 + j, 3), (Cells(2 + j, 8))).Copy _
Destination:=Worksheets("Kunden").Range(Cells(3 + i, 2), (Cells(2 + i, 6)))
End If
Next j
Next i
End Function
Wo ist der Fehler?
Liebe Grüße,
Anna

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte A und B vergleichen und Zeilen kopieren
09.08.2015 21:29:52
Michael
Hallo Anna,
es gibt leider mehrere Fehler:
a) Du möchtest einen waagerechten Bereich Range(Cells(2 + j, 3), (Cells(2 + j, 8)) auf einen mehrzeiligen kopieren: Range(Cells(3 + i, 2), (Cells(2 + i, 6)) (einmal ist es DREI+i, einmal ZWEI+i) - das kann nicht gehen. Abgesehen davon benötigt Excel beim Ziel nur die obere, linke Ecke.
b) die cells-Angaben beziehen sich auf das aktive Blatt (das ist IMMER "Kunden", da Du es eingangs aktiviert hast), beim Kopieren könntest Du also vor jedes cells ausführlich schreiben:
BLA.Range(Worksheets("Tabelle3").cells(bla,bla),usw.)
oder einfacher, da die Spalten immer gleich sind:
Worksheets("Tabelle3").Range("C" & j & ":H" & j).copy
Weil "Kunden" sowieso aktiv ist, kannst Du Dir hier die Angabe sparen, und die obere, linke Ecke genügt: Range("B" & i)
(Cells(3+i,2) ergibt nämlich Spalte "B" für 2.)
Das Ganze geht auch ohne das Destination, insgesamt also so:
Worksheets("Tabelle3").Range("C" & j & ":H" & j).copy Range("B" & i + 2)

(das "B" mußt Du halt ersetzen)
*Aber* die ganze Geschichte wird Ärger machen: wenn es nämlich funktioniert, machst Du 30000 mal 4000 Schleifendurchgänge "im Excelsheet", das sind 3x10hoch4 mal 4x10hoch3=12mal10hoch7, also 120 Mio. Schleifendurchläufe - das dauert.
Abhilfe: Spalte A aus Kunden und Spalte B aus Tabelle3 zuvor je in ein array laden; dann sind es immer noch 120 Mio. Durchläufe, die gehen aber schneller.
Abhlife2: Du durchläufst nur Spalte B aus Tabelle3 und suchst mit .Find in Kunden die passende Zeile, das benötigt nur 4000 .find-Aktionen, das geht relativ fix.
Weiteres nur mit Beispieldatei mit ein paar 100 Spieldaten.
Schöne Grüße,
Michael

Anzeige
kommt mir auch bekannt vor
09.08.2015 21:39:23
Michael
Hi Anna,
wenn Du die gleiche Anna bist wie hier:
https://www.herber.de/forum/archiv/1440to1444/t1440636.htm#1440636
dann versuch doch mal, Ransis Code anzupassen, das läuft für mich unter "Abhilfe3".
Schöne Grüße,
Michael
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige