Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1840to1844
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

Performance

Performance
17.08.2021 09:31:08
PeTeR
Guten Morgen VBA-Spezialisten,
ich habe generell immer wieder ein Problem mit der Performance beim zeilenweisen abarbeiten von Listen per VBA. Hier mal ein einfaches Bsp: Wenn der Text in Spalte A mit "Was" beginnt, dann den Text in die erste leere Zelle in Spalte B eintragen, sonst in die erste leere Zelle der Spalte C. Ich löse das wie folgt:
For Zeile =2 to Ende
If left(cells(Zeile,1),3)="Was" then
cells(ErsteLeere,2).value=cells(Zeile,1).value
else
cells(ErsteLeere,3).value=cells(Zeile,1).value
end if
next Zeile
Bei 500 Zeilen geht das noch, aber wie löse ich das Performance-Problem bei 200.000 Zeilen?
Vielen Dank für euer Anregungen!
PeTeR

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Performance
17.08.2021 10:00:07
Klaus
Hallo PeTer,
Daten in Zellen zu schreiben ist erstmal langsam, es hilft aber möglichst viele Zellen auf einmal zu beschreiben statt jede einzeln.
löse die Abfrage mit einer Formel. Die Formel kannst du dann einmal Rekordern und per Makro in den gesamten Bereich (z.B. "B2:B200000") auf einmal eintragen - ohne Schleife. Das ist dann super schnell.
Wenn es komplexer wird und per Formel nicht geht, schreibe die Ergebnisse nicht in die Tabelle, sondern Zeilenweise in ein Array. Wenn das Array fertig ist, schreibst du das Array auf einmal in die Tabelle, so hast du wiederum nur eine Schreiboperation statt 200.000
LG,
Klaus M.
Anzeige
AW: Performance
17.08.2021 10:26:03
peterk
Hallo
Benutze die Filterfunktion von Excel

Sub Test()
Range("A:A").AutoFilter Field:=1, _
Criteria1:="=Was*", Operator:=xlAnd
Range("A:A").SpecialCells(xlCellTypeVisible).Copy Range("B1")
Range("A:A").AutoFilter Field:=1, _
Criteria1:="Was*", Operator:=xlAnd
Range("A:A").SpecialCells(xlCellTypeVisible).Copy Range("C1")
Range("A:A").AutoFilter
End Sub

AW: Performance
17.08.2021 10:37:57
Rudi
Hallo,
z.B.

Sub test()
Dim vntARR, i As Long
vntARR = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
For i = 1 To UBound(vntARR)
If Left(vntARR(i, 1), 3) = "Was" Then
vntARR(i, 2) = vntARR(i, 1)
vntARR(i, 3) = ""
Else
vntARR(i, 2) = ""
vntARR(i, 3) = vntARR(i, 1)
End If
Next i
Cells(2, 1).Resize(UBound(vntARR), 3) = vntARR
End Sub
Gruß
Rudi
Anzeige
Vielen Dank an alle!
17.08.2021 11:14:26
PeTeR
Vielen Dank an alle für eure hilfreichen Beispiele. Ich sehe schon: Da muss ich mich wohl intensiver mit Arrays beschäftigen.
VG
PeTeR
AW: Performance
17.08.2021 17:41:38
onur
Keine Ahnung, was du mit Performance-Problem meinst, bei mir braucht dieser spezielle Codel 8,9 sec für 200.000 Zeilen, auch ohne Screenupdating zu deaktivieren.
Wenn du aber (warum auch immer) nach jeder Zeile die letzte Zeile(n) neu ermitteln ließest, sehe die Sache natürlich ganz anders aus.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige