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

Zeilen löschen mit Abhängigkeit

Zeilen löschen mit Abhängigkeit
28.09.2021 09:19:08
ugur
Guten Tag liebe Community,
ich habe eine Datei, in welcher die sog. Liefer FZ errechnet werden soll. Dafür wurde von meiner Vorgängerin auch bereits ein Makro erstellt, welches auch soweit ganz gut funktioniert. Das Problem dabei ist jedoch, dass das Makro die Liefer FZ für alle Zeilen in dieser Mappe errechnet. Da die originale Arbeitsmappe jedoch über 12.000 Zeilen besitzt hat mein Vorgesetzter vorgeschlagen nur die Liefer FZ des heutigen Tages, die darauf folgenden 2 Wochen und anschließend alle Freitage innerhalb der nächsten 3 Monate errechnen zu lassen. Mein Gedanke war hier u.U ein Zweites Makro anzulegen, oder das bestehende so zu erweitern, dass jene Zeilen aus der Mappe gelöscht werden, die nicht dem genannten Datum entsprechen. Ich habe bereits mehrfach versucht dies zu selbst zu lösen aber führte zu wenig Erfolgen. Vielleicht hat jemand von euch eine bessere Idee dieses Problem zu lösen Ich habe hier eine Beispieldatei angefügt und kopiere auch das Makro, das die FZ errechnet hier herein. Vielen Dank im Voraus :)
Die Datei ist hier abgelegt: https://www.herber.de/bbs/user/148304.xlsx
Und das Makro:

Sub FZ_berechnen()
Range("AT1").Value = "alte Abrufe"
Range("AU1").Value = "neue Abrufe"
Range("AV1").Value = "alte FZ"
Range("AW1").Value = "neue FZ"
Range("AX1").Value = "Differenz"
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Zeile = 3 To lngLast
Select Case Cells(2, 34).Value
Case Is = 0
Cells(2, 46).Value = "0"
Cells(Zeile, 47).Value = "0"
Case Is > 0
Cells(2, 34).Select
Selection.Copy
Cells(2, 46).Value = "0"
Cells(2, 47).PasteSpecial
Cells(2, 48) = "0"
Range("AW2") = "=RC[-13]+RC[-15]"
Case Is 0,VLOOKUP(RC[-13],C[-13]:C[-12],1,FALSE),0)"
Range("AU3").Select
Selection.AutoFill Destination:=Range("AU3:AU" & lngLast)
'wenn neue Abrufe
Select Case Cells(Zeile, 47).Value
Case Is >= 0
Cells(Zeile, 49) = "=IF(AND(R[-1]C[-48]=RC[-48]),IF(RC[-3]

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

Betreff
Datum
Anwender
Anzeige
select und autofill
28.09.2021 09:35:36
Klaus
Hallo Ugur,
ich habe nicht in deine Datei geschaut und unten stehendes Makro nicht getestet, nur aus dem Ärmel geschüttelt. Select und Autofill sind beides SEHR langsame Kommandos. Wenn du dauf die verzichtest, sollte das Makro ganz ohne Einschränkungen deutlich schneller laufen. Außerdem habe ich vor dem Makro Formelaktualisierungen usw. ausgeschaltet, was nochmal einen Speedboost gibt.
Probier mal aus wie fix das jetzt ist, vielleicht brauchst du die Einschränkungen dann gar nicht mehr.

Sub FZ_berechnen()
GetMoreSpeed (True)
Range("AT1").Value = "alte Abrufe"
Range("AU1").Value = "neue Abrufe"
Range("AV1").Value = "alte FZ"
Range("AW1").Value = "neue FZ"
Range("AX1").Value = "Differenz"
lnglast = Cells(Rows.Count, 1).End(xlUp).Row
For Zeile = 3 To lnglast
Select Case Cells(2, 34).Value
Case Is = 0
Cells(2, 46).Value = "0"
Cells(Zeile, 47).Value = "0"
Case Is > 0
Cells(2, 34).Copy
Cells(2, 46).Value = "0"
Cells(2, 47).PasteSpecial
Cells(2, 48) = "0"
Range("AW2").FormulaR1C1 = "=RC[-13]+RC[-15]"
Case Is 0,VLOOKUP(RC[-13],C[-13]:C[-12],1,FALSE),0)"
'wenn neue Abrufe
Select Case Cells(Zeile, 47).Value
Case Is >= 0
Cells(Zeile, 49).FormulaR1C1 = "=IF(AND(R[-1]C[-48]=RC[-48]),IF(RC[-3]
LG,
Klaus M.
Anzeige
AW: select und autofill
28.09.2021 10:18:06
ugur
Hallo und vielen Dank für die schnelle Antwort. Ich habe das Makro ausprobiert und es läuft wirklich X-Fach schneller als das zuvor. Allerdings glaube ich, dass unsere Rechnerleistung bei so vielen Zeilen nicht ausreichend ist, weshalb es noch immer ziemlich lange dauert. in manchen Durchläufen hat sich Excel letztlich ganz aufgehängt :(
AW: select und autofill
28.09.2021 10:28:42
Klaus
Ich habe mir die Tabelle inzwischen angeschaut. Ich bin der Meinung, das ganze lässt sich auch ohne Schleife lösen (nur per Formeln) - dann geht das auch über 100.000+ Zeilen in wenigen Sekunden.
Ich lasse hier mal offen, da ich heute nicht dazu komme mich damit weiter zu beschäftigen - falls ich Zeit finde, melde ich mich!
Auf die Schnelle:

Range("AT3:AT" & lnglast).FormulaR1C1 = "=IF(RC[-12]0,VLOOKUP(RC[-13],C[-13]:C[-12],1,FALSE),0)"
es ist nicht nötig, die beiden Formeln immer wieder zu schreiben. Pack die Zeilen mal hinter "Next Zeile" und vor "Getmorespeed(False)", das sollte wiederum performance bringen.
LG,
Klaus M.
Anzeige
AW: select und autofill
28.09.2021 12:28:06
ugur
kleines Update: ich habe das Makro mit den beiden neuen Zeilen mal auf der Datei angewendet, wo ich es benötige und habe festgestellt, dass der Datensatz vermutlich einfach zu groß ist. ich habe es anschließend mit weniger Zeilen probiert. Bei etwa nur noch 2.000 Zeilen klappt es gerade noch so.
Auch von mir ein Update ...
28.09.2021 12:33:56
mir
Hall Ugur,
ich stelle fest, das Makro schreibt viele Formeln und überschreibt dann die Formeln (nach den SELECT CASE Ereignissen) in einer Schleife. Wenn du die Abfragen in eine einzelne Formel bekommst (=WENN(AG3 gr 0;"";"") statt SELECT CASE AG3 in VBA) kannst du hier nochmal 80% Performance rausholen.
Es sollte innerhalb der Schleife am besten gar keine Formel geschrieben werden. Idealerweise kann auf die Schleife sogar verzichtet werden.
Mein Tipp:
mach eine neue Anfrage, in der du das Makro und die Formeln zeigst, und frag nach Hilfe die Formel umzustellen und die SELECT CASE loszuwerden. Schreib dort auch dass du verhindern willst, dass Formeln durch das Makro überschrieben werden. Einer der Formelspezis wird sicherlich helfen können, du kannst dort ja auch auf diesen Thread verweisen.
LG,
Klaus M.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige