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

via VBA Zeile einfügen wenn Wert gefunden

via VBA Zeile einfügen wenn Wert gefunden
15.02.2020 10:36:30
Michael
Hallo zusammen,
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array
15.02.2020 11:25:52
Fennek
Hallo,
kritsch ist der "Insert"-Befehl.
Hier eine Variante mit Arrays, die aber noch nachbearbeitet werden muss.

Sub Main
dim Neu()
einf = worksheetfunction.countif(columns(8), "Übrige Sachkosten")
Ar = cells(1,1).currentregion
redim Neu(ubound(Ar)+einf, ubound(Ar,2))
for i = 1 to ubound(Ar)
if Ar(i, 8) = "Übrige Sachkosten" then e = e + 1
for j = 1 to ubound(Ar,2)
Neu(i+e, j) = Ar(i,j)
next j
next i
sheets("Neu").cells(1,1).resize(ubound(Neu), ubound(Neu,2)) = Neu
End Sub
mfg
AW: Array
15.02.2020 12:47:25
Michael
Hallo Fennek,
aufgrund nur vorhandener Anfängerkenntnisse komme ich allein damit nicht weiter. Fehlende Variablen kann ich noch definieren - aber das reicht nicht um den Code zum laufen zu bekommen.
Dennoch Danke für den Hinweis.
Gruß
Michael
Anzeige
AW: Erklärung
15.02.2020 13:42:27
Fennek
Hallo,
es müssen nur 2 Dinge beachtet werden:
- zuerst ein neues Sheets("Neu") anlegen
- beim Start des Makros muss das Blatt mit den Daten aktiv sein
Der Code erzeugt innerhalb von ca 10 Sekunden eine Kopie der Daten mit Leerzeilen an den gewünschten Stellen. Diese können in einem zweiten Schritt mit "Range.Specialcells(xlCellTypeBlank)" (oder so ähnlich) angesprochen werden.
Teste es zuerst in der gezeigten Beispieldatei.
mfg
AW: Erklärung
15.02.2020 13:49:50
Fennek
so sollte es nach der Ausführung aussehen.
Es bleiben noch einige Schritte offen.
https://www.herber.de/bbs/user/135215.xlsx
Anzeige

122 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige