(05.08.2025, 16:22)Andyle schrieb: So, ich habe jetzt die ersten Versuche gemacht.
Nur trägt er ja über die Formel nur in eine Zelle ein.
Die Tabellen sind allerdings nicht intelligent, dass sich die Formel erweitert.
dann machst du in deinen Versuchen etwas anderes als in dem Makro, dass ich dir gezeigt hab.
mein Makro trägt die Formel am Ende des genutzten Zellbereichs von der ersten bis zur letzten Zeile ein.
aber warum zeigst du uns nicht deine Codeversuche? Warum glaubst du, dass ich dir sagen könnte, was du falsch gemacht hast, wenn du mir nicht zeigst, was du gemacht hast? Wäre es hier nicht irgendwie logisch, dass wenn deine Codeversuche nicht funktionieren, du uns auch mal deine Codeversuche zeigst? wir sind hier keine Hellseher und haben Excel nicht in Hogwarths gelernt. Also wenn es nicht funktioniert, zeige immer was du gemacht hast und welchen Code du verwendest.
05.08.2025, 16:48 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2025, 16:50 von Andyle.)
Code:
Sub test1()
Range("K1") = "Berechnung"
With Sheets("Fertiggestellte_Mengen_Chemie").UsedRange With .Columns(.Columns.Count + 1) .FormulaR1C1 = "=IF(CountIfs('AV_Ware'!C10,R2C8),0,Row())" ' .Cells(11, 2).Value = 0 .EntireRow.RevomeDuplicates .Column, xlNo .ClearContents End With End With End Sub
Hi das würde auch alles so funktionieren, wenn du meinen Code nicht verändert hättest.
1. du hast in der Formel noch eine "2" eingefügt FormulaR1C1 = "=IF(CountIfs('AV_Ware'!C10,R2C8),0,Row())"
damit hast du einen absoluten Zellbezug auf $H$2 du brauchst hier aber für die Zeile einen relativen Zellbezug, da der Bezug immer auf die Zeile der Formel gehen muss. das wäre in R1C1-Addressierungschreibweise dann R[0]C8 was man aber zu RC8 verkürzen darf. also die "2" hier wieder löschen
2. auch diese Zeile hast du eigenmächtig geändert: .Cells(11, 2).Value = 0 auch das darf nicht sein, es muss hier bei .Cells(1, 1) bleiben, damit die 0 in die oberste Zeile der Formelspalte kommt. durch die Referenz auf WITH-Klammer (der Punkt), welche den Zellbereich für die Formel enthält, ist das durch das (1, 1) gegeben, egal wo sich diese befindet, dh es ist nicht notwendig, hier die Spalten- und Zeilennummern der Tabelle zu übernehmen. Es wäre auch nicht gut, wenn man das tun würde, denn dann würde der Code seine Fähigkeit verlieren, sich dynamisch (dh ohne Änderung des Codes) an unterschiedlich große Tabellen anzupassen.
außerdem ist es durchaus Absicht, dass ich hier die Überschrift mit einbeziehe. zum einen wäre es umständlich, die Formel erst ab Zeile 2 einzufügen, da ist es einfacher, diese in den ganzen Bereich zu schreiben und die Überschrift nachträglich anzupassen, zum anderen ist es auch funktional notwendig, dass man die Überschrift hier in die Daten mit einbezieht. denn das Duplikate-Entfernen wird bestimmungsgemäß eine Zeile mit 0 stehen lassen. Dh würde man nur mit den Daten arbeiten, dann würde eine zu löschende Zeile nicht gelöscht werden. Das Problem kann man einfach umgehen, indem man die Überschriftenzeile als erste Datenzeile betrachtet und hier die 0 einträgt, damit dies die Zeile ist die stehen bleibt und keine echte Datenzeile, die man nachträglich noch entfernen müsste.
With Sheets("Fertiggestellte_Mengen_Chemie").UsedRange With .Columns(.Columns.Count + 1) .FormulaR1C1 = "=IF(CountIfs('AV_Ware'!C10,RC8),0,Row())" .Cells(1, 1).Value = "Berechnung" .EntireRow.RevomeDuplicates .Column, xlNo .ClearContents End With End With
End Sub
In K1 setzt er jetzt Berechnung
und alle anderen Zeilen haben die Formel: =WENN(ZÄHLENWENNS(AV_Ware!$J:$J;$H2);0;ZEILE())
Nur kommt trotztem noch der Fehler obwohl er die Formelwerte richtig anzeigt
05.08.2025, 18:38 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2025, 18:49 von slowboarder.)
Hi es wäre nett geswesen, wenn du mir die Zeile genannt hättest, in der der Fehler auftritt, das hätte mir die Suche erleichert. oder du hättest die Datei mitschicken können, dann hätte ich einfach testen können. Wenn du mich schon nicht nach Aufwand bezahlst, solltest du nicht mit Informationen zum Problem geizig sein und mir als deinem No-Cost-Helfer das Leben so einfach wie möglich machen.
der Fehler ist ein Tippfehler von mir, es muss heißen: RemoveDuplicates
und nochwas, du hast wieder eine Änderung gemacht, die von dem abweicht, was ich dir geschrieben habe!
in die Überschriftenzeile der Berechnungspalte darfst du nicht eine beliebige Überschrift schreiben (das wäre auch vergebene Liebesmüh, da die Spalte sowieso am Ende gelöscht wird), sondern da muss der Wert rein, den du in der Formel verwendest, um die Zeilen zu kennzeichnen, die gelöscht werden müssen. Nach meiner ausführlichen Erklärung zum Löschen von Zeilen mit dem Duplikate-Entfernen, solltest du auch wissen, warum das notwendig ist.
With Sheets("Fertiggestellte_Mengen_Chemie").UsedRange With .Columns(.Columns.Count + 1) .FormulaR1C1 = "=IF(CountIfs('AV_Ware'!C10,RC8),0,Row())" .Cells(1, 1).Value = 0 .EntireRow.RemoveDuplicates .Column, xlNo .ClearContents End With End With
With Sheets("Lieferscheine_mit_Chargennummer").UsedRange With .Columns(.Columns.Count + 1) .FormulaR1C1 = "=IF(CountIfs('AV_Ware'!C10,RC9),0,Row())" .Cells(1, 1).Value = 0 .EntireRow.RemoveDuplicates .Column, xlNo .ClearContents End With End With
und? ist es schneller? wie findest du das Prinzip, nachdem du es jetzt verstanden hast? ich lösche nur noch so, weil ich diesen Code so für fast jedes Zeilen-Lösch-Aufgabe verwenden kann und im Prinzip nur die Formel anpassen muss.
sollte die Liste AV_Ware sehr lang sein, könnte das ZählenWenn noch spürbare Rechenzeit erzeugen. hier könnte man noch beschleunigen, wenn man AV_Ware nach der Chargennummer aufsteigend sortiert und den X- oder SVerweis verwendet um zu prüfen, ob die Werte dort vorkmmen. Dieser kann in sortierten Listen wesentlich schneller suchen als das ZählenWenn.
Folgende(r) 1 Nutzer sagt Danke an slowboarder für diesen Beitrag:1 Nutzer sagt Danke an slowboarder für diesen Beitrag 28 • Andyle