Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
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

Vergleichen Schleife aufteilen bzw. splitten

Vergleichen Schleife aufteilen bzw. splitten
VolkerM
Hallo Forum
Ich vergleiche zwei Tabellen jeweils die Spalte C (Datumsspalte) auf gleiche Einträge und lasse die Treffer in eine dritte Tabelle schreiben.
Dabei handelt es sich um Massendaten.
Beim Abgleichen von 8.000 mit 300.000 Zeilen läuft das Makro. Bei über 8.000 Zeilen bricht Excel mit dem Hinweis auf nicht genügend Ressourcen ab.
Kann man den Code so umschreiben, dass immer jeweils "5.000-Päckchen" aus dem Worksheets("Referenz") bis zum Zeilenende hinter einander abgefragt werden ?
Public Sub button12(control As IRibbonControl)
' Geburtsdaten vergleichen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Sheets("Vergleich").Select
Dim wksCriteria As Worksheet, WksData As Worksheet, wksTrue As Worksheet
Dim var As Variant
Dim iRow As Long, iRowL As Long
Set wksCriteria = Worksheets("Referenz")
Set WksData = Worksheets("Vergleich")
Set wksTrue = Worksheets("Geburtsdaten")
iRow = 2
Do Until IsEmpty(wksCriteria.Cells(iRow, 3))
var = Application.Match(wksCriteria.Cells(iRow, 3), WksData.Columns(3), 0)
If Not IsError(var) Then
iRowL = wksTrue.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTrue.Rows(iRowL).Value = wksCriteria.Rows(iRow).Value
wksTrue.Cells(iRowL, 6).Value = Cells(var, 1).Value
wksTrue.Cells(iRowL, 7).Value = Cells(var, 2).Value
wksTrue.Cells(iRowL, 8).Value = Cells(var, 3).Value
wksTrue.Cells(iRowL, 9).Value = Cells(var, 4).Value
End If
iRow = iRow + 1
Loop
wksTrue.Columns("E:E").ClearContents
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.Calculate
End With
Sheets("Geburtsdaten").Select
End Sub

Hat jemand eine Idee oder Lösung ?
Vielen Dank im Voraus.
Gruß Volker
AW: Vergleichen Schleife aufteilen bzw. splitten
17.05.2010 12:00:04
Dirk
Hallo Volker,
Du kannst ja mal deine Schleife folgendermassen abaendern:
~F
Public Sub button12(control As IRibbonControl)
' Geburtsdaten vergleichen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Sheets("Vergleich").Select
Dim wksCriteria As Worksheet, WksData As Worksheet, wksTrue As Worksheet
Dim var As Variant
Dim iRow As Long, iRowL As Long
Set wksCriteria = Worksheets("Referenz")
Set WksData = Worksheets("Vergleich")
Set wksTrue = Worksheets("Geburtsdaten")
iRow = 2
redo_loop:
Do Until IsEmpty(wksCriteria.Cells(iRow, 3))
var = Application.Match(wksCriteria.Cells(iRow, 3), WksData.Columns(3), 0)
If Not IsError(var) Then
iRowL = wksTrue.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTrue.Rows(iRowL).Value = wksCriteria.Rows(iRow).Value
wksTrue.Cells(iRowL, 6).Value = Cells(var, 1).Value
wksTrue.Cells(iRowL, 7).Value = Cells(var, 2).Value
wksTrue.Cells(iRowL, 8).Value = Cells(var, 3).Value
wksTrue.Cells(iRowL, 9).Value = Cells(var, 4).Value
End If
iRow = iRow + 1
if iRow mod 5000 = 0 then
goto exit_loop
end if
Loop
wksTrue.Columns("E:E").ClearContents
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.Calculate
End With
Sheets("Geburtsdaten").Select
exit sub
exit_loop:
goto redo_loop
End Sub
Die Schleife sollte alle 5000 mal beenden und dann mit dem letzten iRow als start neu starten, bis das Kriterium 'leere Zeile' greift.
Lass mal hoeren, ob so ok.
Dirk aus Dubai
Anzeige
AW: Vergleichen Schleife aufteilen bzw. splitten
17.05.2010 14:42:57
VolkerM
Hallo Dirk
Danke, dass Du Dich meinem Problem angenommen hast.
Auch mit der Veränderung bricht das Programm mit dem Hinweis auf nicht genügend Ressourcen ab.
Andere Idee ?
Gruß Volker
AW: Vergleichen Schleife aufteilen bzw. splitten
17.05.2010 14:48:41
Dirk
Hallo Volker,
bei welcher Zeilennummer wird den abgebrochen (iRow)?
Falls da 65537 steht, aendere mal die Dimensionierung und deklariere Dim iRow as double
Gruss
Dirk aus Dubai
AW: Vergleichen Schleife aufteilen bzw. splitten
17.05.2010 16:29:57
VolkerM
Hallo Dirk
Bei Zeilennummer 12640 wird abgebrochen.
Auch mit Dim iRow as double erflogt keine Veränderung.
Gruß Volker
AW: Vergleichen Schleife aufteilen bzw. splitten
Dirk
Hallo!
Was ist denn die genaue Fehlernummer?
Dirk aus Dubai
Anzeige
AW: Vergleichen Schleife aufteilen bzw. splitten
17.05.2010 19:04:31
VolkerM
Hallo
Eine Fehlernummer wird beim Abbruch nicht gemeldet.
Es erscheint nur diese Meldung:
Microsoft Excel kann diesen Vorgang mit den verfügbaren Ressoursen nicht ausführen. Bitte wählen Sie weniger Daten aus oder schliessen Sie andere Programme.
Diese Zeile im Editor wird angemeckert:
wksTrue.Rows(iRowL).Value = wksCriteria.Rows(iRow).Value
Gruß Volker
nur mal so...
17.05.2010 19:14:24
Oberschlumpf
...ne Idee
Hi Volker
Und wenn du die zu prüfenden Zellen (8000 + mehr) auf mehrere Spalten verteilst?
Also...
erste Spalte (wo jetzt alle 8000 + mehr drin stehen) = 8000
nächste Spalte = die nächsten 8000
usw, bis alle zu prüfenden Werte auf die Spalten verteilt sind
Wie gesagt, nur ne Idee....
Ciao
Thorsten
Und der Code dann so, dass mit den 300.000 zuerst die 8000 Werte der ersten Spalte abgeglichen werden, dann die Schleife mit der nächsten Spalte wiederholen, so lange, bis alle Spalten überprüft/abgeglichen wurden.
Ich kann das Ganze selbst nicht praktisch testen, da ich kein XL 2007 habe und mir nur ca. 65000 Zeilen zur Verfügung stehen.
Anzeige
huch...
17.05.2010 19:15:32
Oberschlumpf
...die Schlussformel "Ciao..usw" sollte natürlich an den Schluss meines Beitrages...
AW: huch...
18.05.2010 09:27:48
Dirk
Hallo Volker,
setze mal beide dimensionierungen auf Double
iRow und iRowl
Gruss
Dirk aus Dubai
anderer Ansatz
18.05.2010 10:40:34
Erich
Hi Volker,
der Abbruch wird - so vermute ich - dadurch verursacht, dass du das Makro
zu viele Änderungen in der Mappe vornehmen lässt.
iRow und iRowL von Long in Double umzudeklarieren, kann nichts bringen - Long kann sehr große Zahlen handeln...
Hier mal ein anderer Ansatz, bei dem das Ergebnis in einem Rutsch in das Ergebnisblatt geschrieben wird.
Ich bin gespannt, ob das bei dir durchläuft.
Die Konstante für die Spaltenzahl in "Referenz" musst du sicher anpassen.

Option Explicit
Sub Test1()                                           ' Geburtsdaten vergleichen
Dim arrC, lngC As Long, zC As Long
Dim arrD, lngD As Long, zD As Long
Dim arrT(), lngT As Long, zT As Long, cc As Long
Const lngSp As Long = 12                           ' Anz. Spalten in wksCrit
With Worksheets("Referenz")                        ' wksCrit
lngC = .Cells(.Rows.Count, 1).End(xlUp).Row
arrC = .Cells(2, 1).Resize(lngC - 1, lngSp)
End With
With Worksheets("Vergleich")                       ' wksData
lngD = .Cells(.Rows.Count, 1).End(xlUp).Row
arrD = .Cells(1, 1).Resize(lngD, 4)
End With
ReDim arrT(1 To lngSp, 1 To lngC - 1)
Worksheets("Geburtsdaten").Select                  ' wksTrue
For zC = 1 To lngC - 1
For zD = 1 To lngD
If arrC(zC, 1) = arrD(zD, 3) Then
zT = zT + 1
For cc = 1 To 4
arrT(cc, zT) = arrC(zC, cc)
Next cc
For cc = 6 To 9
arrT(cc, zT) = arrD(zD, cc - 5)
Next cc
For cc = 10 To lngSp
arrT(cc, zT) = arrC(zC, cc)
Next cc
End If
Next zD
Next zC
If zT > 0 Then
ReDim Preserve arrT(1 To lngSp, 1 To zT)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1). _
Resize(UBound(arrT, 2), UBound(arrT)) = Application.Transpose(arrT)
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: anderer Ansatz
18.05.2010 12:01:13
VolkerM
Hallo Erich
Danke, dass auch Du mir helfen willst.
Dein Makro läuft zwar durch, jedoch schreibt es keine Ergebnisse ins Geburtsdatenblatt.
Ich habe die Konstante auf 4 geändert:
Const lngSp As Long = 4 ' Anz. Spalten in wksCrit
Die Blätter Referenz und Vergleich bestehen nur aus 4 Spalten und sind in der Struktur gleich.
Gruß Volker
zweiter Versuch
18.05.2010 12:54:13
Erich
Hi Volker,
sorry, ich hatte übersehen, dass jeweils Spalte 3 (C) verglichen wird, hatte A mit C verglichen.
Hier eine kürzere Variante, für je 4 Spalten:

Option Explicit
Sub Test2()                                           ' Geburtsdaten vergleichen
Dim arrC, lngC As Long, zC As Long
Dim arrD, lngD As Long, zD As Long
Dim arrT(), lngT As Long, zT As Long, cc As Long
With Worksheets("Referenz")                        ' wksCrit
lngC = .Cells(.Rows.Count, 1).End(xlUp).Row
arrC = .Cells(2, 1).Resize(lngC - 1, 4)
End With
With Worksheets("Vergleich")                       ' wksData
lngD = .Cells(.Rows.Count, 1).End(xlUp).Row
arrD = .Cells(1, 1).Resize(lngD, 4)
End With
ReDim arrT(1 To 9, 1 To lngC - 1)
Worksheets("Geburtsdaten").Select                  ' wksTrue
For zC = 1 To lngC - 1
For zD = 1 To lngD
If arrC(zC, 3) = arrD(zD, 3) Then
zT = zT + 1
For cc = 1 To 4
arrT(cc, zT) = arrC(zC, cc)
arrT(cc + 5, zT) = arrD(zD, cc)
Next cc
End If
Next zD
Next zC
If zT > 0 Then
ReDim Preserve arrT(1 To 9, 1 To zT)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: zweiter Versuch
18.05.2010 13:40:17
VolkerM
Hi Erich
Dank für Deine Geduld.
Jetzt kommt Laufzeitfehler 9. Index außerhalb des gültigen Bereichs.
Die Zeile:
arrT(cc, zT) = arrC(zC, cc)
wird angemeckert.
Volker
dritter Versuch
18.05.2010 13:51:17
Erich
Hi Volker,
da hatte ich wohl arrT zu klein angesetzt... :-(
Ersetz bitte mal (über wksTrue) die Zeile
ReDim arrT(1 To 9, 1 To lngC - 1)
durch
ReDim arrT(1 To 9, 1 To lngC * lngD)
Das muss auf jeden Fall ausreichen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: dritter Versuch
18.05.2010 15:05:51
VolkerM
Hi Erich
Nach der Änderung kommt nun sofort:
Laufzeitfehler 7
Nicht genügend Speicher.
Volker
Anzeige
AW: dritter Versuch
Dirk
Hallo Volker,
da solltest Du dann waehrend der Abarbeitung abspeichern.
Falls Du da wieder das Urspruengliche Macro verwenden moechtest, waere das ein Loesungsansatz:
Public Sub button12(control As IRibbonControl)
' Geburtsdaten vergleichen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Sheets("Vergleich").Select
Dim wksCriteria As Worksheet, WksData As Worksheet, wksTrue As Worksheet
Dim var As Variant
Dim iRow As Long, iRowL As Long
Set wksCriteria = Worksheets("Referenz")
Set WksData = Worksheets("Vergleich")
Set wksTrue = Worksheets("Geburtsdaten")
iRow = 2
redo_loop:
Do Until IsEmpty(wksCriteria.Cells(iRow, 3))
var = Application.Match(wksCriteria.Cells(iRow, 3), WksData.Columns(3), 0)
If Not IsError(var) Then
iRowL = wksTrue.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTrue.Rows(iRowL).Value = wksCriteria.Rows(iRow).Value
wksTrue.Cells(iRowL, 6).Value = Cells(var, 1).Value
wksTrue.Cells(iRowL, 7).Value = Cells(var, 2).Value
wksTrue.Cells(iRowL, 8).Value = Cells(var, 3).Value
wksTrue.Cells(iRowL, 9).Value = Cells(var, 4).Value
End If
iRow = iRow + 1
if iRow mod 5000 = 0 then
thisworkbook.save
goto exit_loop
end if
Loop
wksTrue.Columns("E:E").ClearContents
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.Calculate
End With
Sheets("Geburtsdaten").Select
exit sub
exit_loop:
goto redo_loop
End Sub
Lass' mal hoeren, ob ok.
Gruss
Dirk aus Dubai
Anzeige
AW: dritter Versuch
Dirk
Hallo Volker,
zur Klaerung noch folgendes:
setze mal ein debug.print application.memoryused
in Deinen Code un schau mal, wieviel Speicher durch Excel waehrend der Abarbeitung belegt wird (kannst das auch als error exit machen:
on error goto get_mem
.
.
get_mem:
msgbox "Memory used: " & application.memoryused
Excel 2003 hat ein Limit von 1Gb
Gruss
dirk aus Dubai
AW: dritter Versuch
18.05.2010 17:47:23
VolkerM
Hallo Dirk,
Echt toll und herzlichen Dank, das Programm läuft jetzt voll durch.
Am Ende habe ich noch:
Set wksCriteria = Nothing
Set WksData = Nothing
eingefügt !?
Liege ich da richtig, dass so der Speicher entleert wird ? (Laie halt)
Nunmehr kann man auch nach Ablauf des Programms weiter arbeiten. Zuvor hatte er dann auch mit den Ressourcen gemeckert.
Ich mach gleich noch einen Test mit richtig viel an Datensätzen -jedoch dauern die Durchläufe...- und melde mich dann.
Gruß Volker
Anzeige
vierter Versuch
18.05.2010 17:05:12
Erich
Hi Volker,
dann machen wir die Dimensionierung eben etwas flexibler,
damit nicht viel mehr bestellt als gebraucht wird:

Sub Test3()                                           ' Geburtsdaten vergleichen
Dim arrC, lngC As Long, zC As Long
Dim arrD, lngD As Long, zD As Long
Dim arrT(), lngT As Long, zT As Long, cc As Long
With Worksheets("Referenz")                        ' wksCrit
lngC = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
arrC = .Cells(2, 1).Resize(lngC, 4)
End With
With Worksheets("Vergleich")                       ' wksData
lngD = .Cells(.Rows.Count, 1).End(xlUp).Row
arrD = .Cells(1, 1).Resize(lngD, 4)
End With
ReDim arrT(1 To 9, 1 To lngC)
Worksheets("Geburtsdaten").Select                  ' wksTrue
For zC = 1 To lngC
For zD = 1 To lngD
If arrC(zC, 3) = arrD(zD, 3) Then
zT = zT + 1
If zT > UBound(arrT, 2) Then ReDim Preserve arrT(1 To 9, 1 To 2 * zT)
For cc = 1 To 4
arrT(cc, zT) = arrC(zC, cc)
arrT(cc + 5, zT) = arrD(zD, cc)
Next cc
End If
Next zD
Next zC
If zT > 0 Then
ReDim Preserve arrT(1 To 9, 1 To zT)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: vierter Versuch
18.05.2010 17:59:59
VolkerM
Hi Erich
Jetzt kommt es zu Laufzeitfehler 13, Typen unverträglich
und die Zeilen:
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
werden angemeckert.
Gruß Volker
Zeilenzahl?
18.05.2010 19:00:24
Erich
Hi Volker,
in meinem Excel (XP) kommt dieser Fehler, wenn die maximale Zeilenzahl (bei mir 65536) überschritten wird.
Das erwarte ich bei XL12 eigentlich nicht.
Baust du bitte mal am Ende des Makros eine MsgBox ein, damit wir sehen, welche Größen auftreten?
Das sollte dann so aussehen:

If zT > 0 Then
MsgBox Cells(Rows.Count, 1).End(xlUp).Row & vbLf & zT & vbLf & Rows.Count
ReDim Preserve arrT(1 To 9, 1 To zT)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
End If
End Sub
Ich bin gespannt, welche drei Zahlen da angezeigt werden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
fünfter Versuch
18.05.2010 19:16:29
Erich
Hi Volker,
in dieser Variante kannst du festlegen, nach wie vielen Ergebnissen das Array jeweils ausgegeben werden soll.
Ich hab jetzt mal 50000 eingetragen.

Option Explicit
Sub Test5()                                           ' Geburtsdaten vergleichen
Dim arrC, lngC As Long, zC As Long
Dim arrD, lngD As Long, zD As Long
Dim arrT(), lngT As Long, zT As Long, cc As Long
Const lngZAus As Long = 50000                ' hiermit kannst du spielen
With Worksheets("Referenz")                        ' wksCrit
lngC = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
arrC = .Cells(2, 1).Resize(lngC, 4)
End With
With Worksheets("Vergleich")                       ' wksData
lngD = .Cells(.Rows.Count, 1).End(xlUp).Row
arrD = .Cells(1, 1).Resize(lngD, 4)
End With
ReDim arrT(1 To 9, 1 To lngZAus)
Worksheets("Geburtsdaten").Select                  ' wksTrue
For zC = 1 To lngC
For zD = 1 To lngD
If arrC(zC, 3) = arrD(zD, 3) Then
If zT >= UBound(arrT, 2) Then
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
ReDim arrT(1 To 9, 1 To lngZAus)       ' arrT initialisieren
zT = 0
End If
zT = zT + 1
For cc = 1 To 4
arrT(cc, zT) = arrC(zC, cc)
arrT(cc + 5, zT) = arrD(zD, cc)
Next cc
End If
Next zD
Next zC
If zT > 0 Then
'      MsgBox Cells(Rows.Count, 1).End(xlUp).Row & vbLf & zT & vbLf & Rows.Count
ReDim Preserve arrT(1 To 9, 1 To zT)
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(zT, 9) = _
Application.Transpose(arrT)
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: fünfter Versuch
18.05.2010 19:23:31
VolkerM
Hi Erich,
hier die drei Zahlen von der MsgBox:
1
134637
1048576
Volker
fünfter Versuch gelaufen?
18.05.2010 20:38:37
Erich
Hi Volker,
das sieht ganz normal aus. 1048576 ist die max. Zeilenzahl ab XL12.
Vielleicht hat XL aber doch ein Problem damit, ein Array mit 134637 Zeilen in eine Tabellenblatt zu schreiben.
Hast du Test5() schon ausprobiert? Da tritt dieses eventuelle Problem nicht auf...
Ich kann das leider nicht selbst mit genügend großen Zeilenzahlen testen, hab ja "nur" XL10.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: fünfter Versuch gelaufen?
18.05.2010 21:06:27
VolkerM
Hi Erich,
die Tests laufen noch.
Ich habe momentan ganz erhebliche Datenmengen zum Abgleichen laufen.
Nur sie dauern natürlich echt lange.
Bis jetzt sieht es wirklich gut mit den 50.000 aus:)
Der letzte Test läuft schon über eine halbe Stunde
Ich melde mich dann mit dem Ergebnis...
Volker
AW: fünfter Versuch gelaufen?
19.05.2010 08:42:29
VolkerM
Hallo Erich, hallo Dirk
Herzlichen Dank an Euch beiden.
Ihr habt mir sehr geholfen.
Mit richtig Massendaten ist der Test über Nacht gelaufen und das Ergebnis ist sehr gut.
Ich hatte die Const auf 30.000 gesetzt und es läuft durch.
Erich, eine letzte Frage, wenn ich nun Spalte A vergleichen will, dann ändere ich
If arrC(zC, 3) = arrD(zD, 3) Then
auf
If arrC(zC, 1) = arrD(zD, 1) Then
richtig, oder muss noch mehr umgestellt werden ?
Gruß Volker
Prima!
19.05.2010 08:52:21
Erich
Hi Volker,
das freut mich! Ja, das mit Spalte A stimmt so, mehr ist nicht zu tun.
Hier habe ich noch eine etwas sicherere und hoffentlich schnellere Variante:

Sub Test6a()                                     ' Vergleich bei großen Datenmengen
Dim arrC, lngC As Long, zC As Long, arrTC()
Dim arrD, lngD As Long, zD As Long, arrTD()
Dim lngT As Long, zT As Long, cc As Long
Const lngZAus As Long = 30000                ' Zeilenzahl für Zwischen-Ausgabe
With Worksheets("Referenz")                        ' Liste 1
lngC = .Cells(.Rows.Count, 1).End(xlUp).Row - 1 '  ab Zeile 2
arrC = .Cells(2, 1).Resize(lngC, 4)             '  Spalten A:D
End With
With Worksheets("Vergleich")                       ' Liste 2
lngD = .Cells(.Rows.Count, 1).End(xlUp).Row     '  ab Zeile 1
arrD = .Cells(1, 1).Resize(lngD, 4)             '  Spalten A:D
End With
ReDim arrTC(1 To 4, 1 To lngZAus)                  ' Ausgabe-Arrays
ReDim arrTD(1 To 4, 1 To lngZAus)
Worksheets("Geburtsdaten").Select                  ' Ausgabeblatt
lngT = Cells(Rows.Count, 1).End(xlUp).Row
For zC = 1 To lngC
For zD = 1 To lngD
If arrC(zC, 1) = arrD(zD, 1) Then            ' Vergleich der Spalten A
If zT >= UBound(arrTC, 2) Then            ' Zwischen-Ausgabe
Cells(lngT + 1, 1).Resize(zT, 4) = Application.Transpose(arrTC)
Cells(lngT + 1, 6).Resize(zT, 4) = Application.Transpose(arrTD)
ReDim arrTC(1 To 4, 1 To lngZAus)      ' arrTx initialisieren
ReDim arrTD(1 To 4, 1 To lngZAus)
lngT = lngT + lngZAus
zT = 0
ActiveWorkbook.Save               ' ... Mutter der Porzellankiste
End If
zT = zT + 1
For cc = 1 To 4
arrTC(cc, zT) = arrC(zC, cc)
arrTD(cc, zT) = arrD(zD, cc)
Next cc
End If
Next zD
Next zC
Erase arrC, arrD
ReDim Preserve arrTC(1 To 4, 1 To zT)              ' Rest-Ausgabe
Cells(lngT + 1, 1).Resize(zT, 4) = Application.Transpose(arrTC)
Erase arrTC
ReDim Preserve arrTD(1 To 4, 1 To zT)
Cells(lngT + 1, 6).Resize(zT, 4) = Application.Transpose(arrTD)
End Sub
Du könntest auch noch ausprobieren, ob das Makro schneller läuft,
wenn du die Zeilen

For cc = 1 To 4
arrTC(cc, zT) = arrC(zC, cc)
arrTD(cc, zT) = arrD(zD, cc)
Next cc
ersetzt durch
            arrTC(1, zT) = arrC(zC, 1)
arrTC(2, zT) = arrC(zC, 2)
arrTC(3, zT) = arrC(zC, 3)
arrTC(4, zT) = arrC(zC, 4)
arrTD(1, zT) = arrD(zD, 1)
arrTD(2, zT) = arrD(zD, 2)
arrTD(3, zT) = arrD(zD, 3)
arrTD(4, zT) = arrD(zD, 4)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Prima!
19.05.2010 10:58:47
VolkerM
Hi Erich,
vielen Dank nochmal für Deine Hilfsbereitschaft, echt toll.
Habe jetzt noch Termine und werde erst abends testen können.
Ich melde mich dann morgen mit dem Ergebnis.
Gruß Volker
AW: Prima!
20.05.2010 07:48:11
VolkerM
Hi Erich,
alle Tests sind gut verlaufen.
Dein Makro läuft immer voll durch und auch recht schnell.
Herzlichen Dank.
Gruß Volker

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige