ich bin noch recht frisch im Umgang mit VBA und habe mit folgender Aufgabenstellung noch Probleme:
Eine Excel Arbeitsmappe dient dem Controlling zur Darstellung interner Prozesse. Die Arbeitsmappe arbeitet mit verschiedenen Pivottabellen, die alle ein Basistabelle als Datenquelle haben. In dieser Basistabelle müssen nun neue Zeilen mit Inhalt eingefügt werden. Einfügen solle immer erfolgen, wenn in Spalte H der Begriff "Übrige Sachkosten" steht. Eingefügt werden soll immer die Zeile, in der der zu suchende Begriff in Spalte H gefunden wurde. Dann soll in der neu eingefügten Zeile in Spalte H der Begriff "Übrige Sachkosten" durch den Begriff "davon periodenfr. Aufwand" ersetzt werden. Ich habe bereits ein Makro erstellt das diese Anforderungen erfüllt. Problem ist nur die Performance. Die Basistabelle hat 100.000 Zeilen und mein Makro hängt hier Excel komplett auf, nichts geht mehr - habe es auch mal über Nacht laufen lassen - ohne Erfolg. Ich vermute mal es liegt an der von mir angewandten Vorgehensweise im Makro. Ich selektiere die gefundene Zeile, kopiere sie und füge sie ein mit Verschiebung der restlichen Zellen nach unten. Hier mein Makro Code:
Sub ZeileEinfuegen()
Dim i As Long
Application.ScreenUpdating = False
' Suchen nach "Sonstige Sachkosten in Spalte H
For i = Cells(Rows.Count, "H").End(xlUp).Row To 1 Step -1
If Cells(i, "H") = "Übrige Sachkosten" Then
' wenn gefunden ganze Zeile markieren
Rows(i).Select
' Selektion kopieren
Selection.Copy
' und einfügen - übrige Zellen werden nach unten verschoben
Selection.Insert Shift:=xlDown
' in Spalte H der eingefügten Zeile Text ändern
Cells(i, 8).Value = "davon periodenfr. Aufwand"
End If
Next
Application.ScreenUpdating = True
End Sub
Beispieldatei mit anonymisierten Daten:
https://www.herber.de/bbs/user/135210.xlsm
Bitte um Vorschläge wie ich das performanter umsetzen kann.
Danke und Gruß
Michael