Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Spalte A und B vergleichen und Zeilen kopieren

Spalte A und B vergleichen und Zeilen kopieren
09.08.2015 18: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

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 19: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

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige