Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1828to1832
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
Zellen einfügen wenn letzte leer ist
17.05.2021 15:16:42
Ron
Hallo Leute,
ich bin neu hier im Forum und brauche ein wenig hilfe zu meinen schwachen VBA Kenntnissen.
Ich möchte ein Makro schreiben das aus dem ersten Tabellenblatt die Werte kumuliert übernimmt und in das zweite Tabellenblatt schreibt. Soweit klappt das ganz gut. Da sich der Programmcode aber wiederholt möchte ich das gerne mit einer Schleife machen weiß aber nicht wie ich es anstellen soll.
Ich habe es jetzt so geregelt das er eine bestimmte Zelle ansprechen soll auf dem Blatt und wenn er nichts einfügt, dass die leeren Zeilen gelöscht werden soll. Damit es dann später weiter untereinander steht. Aber das ist ziemlich mühseelig. Besonders wenn ich später noch weitere aufgaben dazwischen einfügen möchte. Da müsste ich dann alle Zellen anpassen.

'Tapeten entfernen (Wände)
If Application.WorksheetFunction.SumIf(Worksheets("Aufnahmeblatt").Columns(2), "Tapeten entfernen (Wände)", Worksheets("Aufnahmeblatt").Columns(7)) > 0 Then
Cells(8, 1) = "1"
Cells(8, 2) = "Tapenten entfernen (Wände)"
Range(Cells(8, 2), Cells(8, 3)).MergeCells = True
Range("B8").Font.Bold = True
Cells(9, 2) = "Tapete oder Raufaser mit oder ohne Anstrich einschließlich Makulatur und Kleisterresten restlos entfernen und entsorgen Einschließlich aller Nebenarbeiten."
Rows("9:9").RowHeight = 80
Range(Cells(9, 2), Cells(9, 3)).MergeCells = True
Cells(8, 4) = Application.WorksheetFunction.SumIf(Worksheets("Aufnahmeblatt").Columns(2), "Tapeten entfernen (Wände)", Worksheets("Aufnahmeblatt").Columns(7))
Cells(8, 5) = "m²"
Range("D9").Value = "leer"
With Range("D9").Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Range("F8,H8").Borders(xlEdgeBottom)
.LineStyle = xlDot
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Else
Cells(8, 1) = ""
Cells(8, 2) = ""
Cells(8, 4) = ""
Cells(8, 5) = ""
Cells(9, 2) = ""
Cells(9, 4) = ""
End If
'Tapeten entfernen (Decke)
If Application.WorksheetFunction.SumIf(Worksheets("Aufnahmeblatt").Columns(2), "Tapeten entfernen (Decke)", Worksheets("Aufnahmeblatt").Columns(7)) > 0 Then
Cells(10, 1) = "2"
Cells(10, 2) = "Tapenten entfernen (Decken)"
Range(Cells(10, 2), Cells(10, 3)).MergeCells = True
Range("B10").Font.Bold = True
Cells(11, 2) = "Tapete oder Raufaser mit oder ohne Anstrich einschließlich Makulatur und Kleisterresten restlos entfernen und entsorgen Einschließlich aller Nebenarbeiten."
Rows("11:11").RowHeight = 80
Range(Cells(11, 2), Cells(11, 3)).MergeCells = True
Cells(10, 4) = Application.WorksheetFunction.SumIf(Worksheets("Aufnahmeblatt").Columns(2), "Tapeten entfernen (Decke)", Worksheets("Aufnahmeblatt").Columns(7))
Cells(10, 5) = "m²"
Range("D11").Value = "leer"
With Range("D11").Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Range("F10,H10").Borders(xlEdgeBottom)
.LineStyle = xlDot
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Else
Cells(10, 1) = ""
Cells(10, 2) = ""
Cells(10, 4) = ""
Cells(10, 5) = ""
Cells(11, 2) = ""
Cells(11, 4) = ""
End If
Dim intRow As Integer, intLastRow As Integer
intLastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
For intRow = intLastRow To 1 Step -1
If Application.CountA(Rows(intRow)) = 0 Then
intLastRow = intLastRow - 1
Else
Exit For
End If
Next intRow
For intRow = intLastRow To 1 Step -1
If IsEmpty(Cells(intRow, 4)) Then
Rows(intRow).Delete
End If
Next intRow

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen einfügen wenn letzte leer ist
17.05.2021 23:41:48
Yal
Hallo Ron,
das Problem ist nicht das VBA-Wissen, sondern Methodik: Idealerweise trennt man die Datenhaltung, die Datenverarbeitung und die Datenpräsentation von einander.
Ein MergeCell und Farbung von Zelle ist Präsentation.
Eine Summierung ist Verarbeitung: dafür gibt zum Beispiel Pivottabelle (kein VBA!)
Pivottabelle setzen aber voraus, dass deine Daten sauber tabellenbasiert aufgestellt sind (Datenhaltung).
Nehm Dir ein paar Minute um Einstiegsvideos für Pivottabelle anzuschauen.
Anschliessend kannst Du immer noch Färbung und MergeCel per VBA anstellen. Aber dann auf einem sauberen Baustelle.
Viel Erfolg
Yal
Anzeige
AW: Zellen einfügen wenn letzte leer ist
18.05.2021 09:04:03
Ron
Das will ich aber so nicht machen ich möchte ja keine Daten analysieren. Und würde so nichts bringen. Vlt habe ich es nicht vernünftig erklärt was ich den machen möchte.
Das erste Tabellenblatt ist sozusagen ein Laufzettel, der für eine Wohnungsaufnahme gedacht ist. Also Wohnzimmer, Flur usw. und da drunter steht was alles gemacht werden könnte zb. Tapeten entfernen, streichen und so weiter. Hier klicke nur an was gemacht werden soll und er schreibt mir auf diesen Zettel welche Mengen gemacht werden muss.
Auf dem andere Tabellenblatt soll er mir die jeweiligen Aufgaben zusammenrechnen und dann wie ein Leistungsverzeichnis ausgeben deshalb auch der Code.
Es ist von Wohnung zu Wohnung unterschiedlich was gemacht werden soll deshalb möchte ich die einzelnen Zellen nicht bestimmen sondern, dass ich wenn der jeweilige Wert größer 0 ist es mir es so ausgibt.
Ich möchte es dann später als PDF ausgeben und dann an Unternehmer zusenden, damit sie mir dazu Preise schreiben.
Anzeige
Beispieldatei wird benötigt
18.05.2021 09:23:06
Yal
Hallo Ron,
ich glaube, wir bräuchten eine Beispiel-Datei (anonymisiert, aber trotzdem aussagekräftig), weil sonst ist es aus dem Code nicht zu entnehmen, was Du vorhast.
VG
Yal
AW: Beispieldatei wird benötigt
18.05.2021 09:49:05
Ron
Also ich habe ein Beispiel hoch geladen wie es aussehen soll. Wie gesagt es geht nur um den Code den ich oben geschrieben habe. Weil ich möchte nicht jeder einzelnen Aufgabe eine bestimmte Zelle zuweisen es soll halt flexibel sein.
So das wenn ich noch weitere Aufgaben in das erste Tabellenblatt hinzufüge den code für die Neue Aufgabe kopiere und in die entsprechende Position packe und umschreibe.
https://www.herber.de/bbs/user/146244.xlsx
Anzeige
AW: Beispieldatei wird benötigt
18.05.2021 15:20:02
Yal
Hallo Ron,
es ist bei dir was grösseres. Nehme ich -vielleicht- heute Abend Zeit dafür.
Dazwischen setze ich auf "noch offen". Falls anderen Ideen hätten.
VG
Yal
AW: Beispieldatei wird benötigt
18.05.2021 17:49:12
Ron
Hätte ich jetzt nicht gedacht. Aber wäre echt super wenn man mir hier helfen kann
AW: Beispieldatei wird benötigt
18.05.2021 18:51:39
Yal
Hallo Ron,
vielleicht denkst Du die Sache zu kompliziert. Ich weiß nicht, ob dein Anliegen das Lernen von VBA oder das Lösen des Problems ist, aber in alle Fälle gilt: reduziere die Komplexität und dann programmiere was. Sonst programmierst Du unnötige Komplexität ein! (und codierte Komplexität ist Komplixität hoch 2)
Anbei mein Vorschlag von reduzierter Komplexität:
_ pro Raum eine Spalte
_ obere Bereich, die Eingabe: Länge, Breite, Deckenhöhe, aber auch Abzüge für L-formige Räume (es geht, weil der Rest einfacher ist)
_ mittlere Bereich: die daraus berechnete, relevante Grösse, Decken-/Bodenfläche, Wandfläche, Umfang.
_ unten die Aufgaben: es ist mir leider nicht gelungen, das Doppelklick-Ereignis zu implementieren (funktioniert gerade bei mir nicht, weiß nicht warum. Muss ich noch prüfen), aber beim Doppelklick auf einer Zelle, z.B. F14, hätte ich per Makro anhand des Info-Typs (versteckt in Spalte D) die passenden Wert aus dem Bereich F8:F10 geholt (bzw jeweilige Spalte). Daher Punkt 5 in 5 und 5.1. getrennt: Wand und decke separat.
In dem Fall von F14 Fläche und somit 20. Diese Zahl ist jederzeit überschreibbar, da keine Formel.
In Spalte E bildet sich die Summe. Das ist was Du auf das nächste Blatt übertragen muß, um den Kostenvoranschlag zu vervollständigen.
Ein zusätzliche Raum? Einfach eine zusätzliche Spalte.
Tipp: vor der letzten Spalte einfügen, dann erweitert sich die Summenformeln in Spalte E dementsprechend ;-)
Ein zusätzliche Aufgabe/Auftrasposition? Einfache eine zusätzliche Zeile.
https://www.herber.de/bbs/user/146261.xlsx
Also für dich bleibt:
_ die Übernahme der Wert per Doppelklick
_ die Übertragung aufs nächste Blatt (wobei ein Copy-paste macht es auch!)
VG
Yal
Anzeige
AW: Beispieldatei wird benötigt
18.05.2021 19:49:58
Ron
Yal,
ich finde es super wieviel Mühe du hier rein investierst, aber das ist nicht was ich meinte. Das Aufnahmeblatt ist so in Ordnung.
Es geht nur um das LV-Blatt.
Das Aufnahmeblatt benutze ich, wenn ich in einer Wohnung bin. Da brauche ich für die Räume nur die Maße: Deckenhöhe, Umfang und Fläche. Daraus ergibt sich alle Maße für Arbeiten an Wände decke und Böden.
Mit einer Checkbox mache ich nur ein Hacken bei den Arbeiten, die gemacht werden, soll Raum für Raum. Der Zettel soll auch dafür dienen das ich noch weiß in welchen Räumen was gemacht werden soll.
Wenn ich meine Hacken gemacht habe, soll mit einen Bottom ein LV generiert werden. Er nimmt also alle Maße aus dem Aufnahmeblatt in das LV-Blatt und soll das so machen wie ich das oben geschrieben habe. Das funktioniert ganz gut, aber ich gebe ja ganz bestimmte Spalten vor damit es auch klappt.
Zb. Tapeten entfernen (Wände) habe ich für die Zeile 8 und 9 vorgesehen und für Tapeten entfernen (Decke) 10 und 11 usw im Arbeitsblatt Leistungsverzeichnis. So aber wenn ich jetzt aber Keine Tapenten entfernen (Decke) muss dann ist die Zeile 10 und 11 leer und deshalb auch der untere Code, damit er die Leeren spalten rauslöscht.
Ich möchte aber das mit einer Schleife oder Loop versehen. So das VBA in die letzten Zeilen immer das einfügt. Ich habe es schon mal versuch aber er hat es immer Überschrieben und ist nicht in die nächste Zeile gerutscht.
Ich wollte jetzt auch eigentlich ungerne die ganze Excel hier hochladen. Ich dachte man versteht schon was ich meine.
Das Aufnahmeblatt ist so in Ordnung
Anzeige
AW: Beispieldatei wird benötigt
18.05.2021 20:14:51
Yal
Hallo Ron,
na dann bin ich derjenige, der zu kompliziert denkt :-)
Beim Löschen oder Einfügen in Schleife, immer "von hinten" arbeiten (wie beim Boden lackieren), weil wenn man die Zeile 20 löscht, ist die Zeile 21 die neue Zeile 20 und man nimmt sich dann die nächste: die 21, ehemalige 22. Die ehemalige 21 wird ignoriert.
Das Coding geht davon aus, dass immer 2 Zeilen zusammengehören und zusammen gelöcht werden sollen (keine leere Zeile dazwischen).
In der erste der beide Zeile (also die obere) wird geprüft, ob die Spalte D befüllt ist. Wenn leer (keine Menge), beide Zeilen löschen.

Sub LeereZeilen_löschen()
Dim Z As Integer
'beim Löschen immer "von hinten" (also von unten oder von rechts)
'weil die Zeilen-/Spalten-nummer "danach" sich ändern
With Worksheets("Leistungsverzeichnis")
For Z = .Range("A9999").End(xlUp).Row To 8 Step -2
'wenn Spalte D der beachtete Zeile leer ist, dann beide Zeilen löschen
If .Cells(Z, 4) = "" Then .Cells(Z, 1).Resize(2, 1).EntireRow.Delete
Next Z
End With
End Sub
Im vorigen Konzept, kann man auch ein 1 oder ein x in der Kreuzung Aufgabe/Raum und bei der Übertragung die richtige Wert ermitteln. Die Summe in Spalte E ist dann nicht aktuell.
VG
Yal
Anzeige
AW: Beispieldatei wird benötigt
18.05.2021 20:39:53
Ron
Ja ok werde ich mal morgen mal Testen.
Aber geht das nicht mit einer Schleife oder Loop der obereren Code. Das er halt immer in die jeweil letzten beiden Zeilen die Geschichte einfügt?
So könnte man sich das mit den löschen der Zeilen sparen. Und ich müsste nicht alle cells und range angaben ändern wenn ich ich das Blatt ändere, in dem ich noch andere Arbeiten die mir vlt noch einfallen einfüge.
Aber erst mal vielen Danke für deine Mühe und Geduld hier mit mir :)
AW: Beispieldatei wird benötigt
18.05.2021 23:02:22
Yal
Hallo Ron,
das ist ja der Punkt, der zu meiner "Daten-Organisationsvorschlag" geführt hat:
wenn die Daten von Anfang an gut strukturiert sind, braucht es nur ein Anfangsstelle und der Regel, wie die nächste erreicht wird, dann geht es in Loop.
Jede der Aufgaben hat einen Nummer. Man kann dann leicht die "Auswahl" durchgehen, wenn die Summe nicht null ist, Nummer und Überschrift nehmen, Beschreibung in der Liste holen und es im Auswertung einfügen.
Anbei die vollständige Lösung. Das Doppelklick funktioniert auch in der Aufnahmeblatt.
Für die Übernahme Alt+F8 und "Übernehmen" auswählen.
https://www.herber.de/bbs/user/146264.xlsm
VG
Yal
Anzeige
AW: Beispieldatei wird benötigt
19.05.2021 13:20:14
Ron
Hallo Yal,
erst mal richtig gut was du da gemacht hast finde super. Da merkt man wie wenig Ahnung man hat von VBA und was man alles machen kann. Echt spitze :)
Ich werde schauen, dass ich deine Geschichte mit integiere, ein paar Sachen muss ich dann noch anpassen.
Ich würde dir echt gerne die ganze Arbeitsmappe zukommen lassen, damit du auch siehst wie ich es mir genau vorgestellt habe. Denn dein Layout beim Aufnahmeblatt ist ja sehr Prakmatisch. Und offensichtlich kann man sich einige Sachen wesentlich einfacher machen ;)
Aber echt super das du mir geholfen hast :)
Vielen Dank für die Rückmeldung. oT
19.05.2021 15:29:06
Yal

147 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige