Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Einfügen von Zeilen per VBA mit Bedingungen
08.06.2016 10:55:25
Zeilen
Hallo zusammen,
anschließend an eine bereits von diesem Forum gelöste Frage (https://www.herber.de/forum/archiv/1496to1500/t1497176.htm) habe ich eine weitere Problemstellung, die mir einiges Kopfzerbrechen bereitet. Über Lösungsansätze und Hilfestellung bei der Programmierung eines Makros würde ich mich sehr freuen... :)
Beispieldatei: https://www.herber.de/bbs/user/106080.xlsm
Folgende Situation: Der Button "Daten kopieren" kopiert die Datensätze von Tabelle1 nach Tabelle2 und löscht Leerzeilen, -spalten und Formeln. Soweit super. Tabelle2 soll später weitergenutzt werden, als Datengrundlage für eine Pivottabelle (ohne VBA zunächst).
Bei der zu bearbeitenden Datei geht es um eine Budgetdatei. Unter anderem gibt es die Spalte "Allokation", die anzeigt, wie ein Betrag auf die Kalendermonate verteilt werden soll. Der Nutzer kann entweder einen BEtrag in einen dezidierten Monat schreiben lassen (dann schreibt er in Spalte "Allokation" den Monatsnamen) oder er schreibt einen Gesamtbetrag in die Spalte "Betrag" und in die Spalte "Allokation" "12 Monate". Dann soll der Gesamtbetrag auf alle Monate gleichmäßig verteilt werden. Beispiel: Gesamtbetrag 1200€ - in jeden Monat sollen 100€ verteilt werden.
Dieser inhaltliche Zusammenhang führt zu meinem VBA-Problem (in Verbindung mit der späteren Pivot-Tabelle): derzeit steht nach Klick auf "Daten kopieren" in Tabelle2 die Kopie der Daten von Tabelle1. Also: bei einer Verteilung in einen bestimmten Monat wird der Monat und der Betrag in die Tabelle geschrieben und ist später per Pivot-Tabelle vernünftig auswertbar. Allerdings wird auch bei der Allokation "12 Monate" logischerweise nur dieser Text und der Gesamtbetrag (oder auch ein vorher berechneter Verrechnungsbetrag) übernommen. Dies kann ich jedoch später nicht wirklich nutzen.
Ich brauche quasi im Fall einer Allokation "12 Monate" ein Makro, das mir nach dem Kopieren diese eine Zeile in Tabelle2 umwandelt. Und zwar in 12 Zeilen, mit jeweils den gleichen Daten und Formeln (Betrag: 1.200€ / 12 = 100€ in diesem Fall), allerdings sollte für jeden Monat (also Januar, Februar, März,...) eine eigene Zeile angelegt werden (Zeile kopieren und zwölf mal unter der gewünschten Zeile einfügen?!). Am besten direkt unter der Zeile, die gezwölftelt wird. Anschließend könnte man die ursprüngliche Zeile löschen. Somit hätte ich dann jeweils einen Monat und einen zugeordneten Betrag, was ich für die weitere Auswertung nutzen könnte.
Ich hoffe, ich konnte mein Problem einigermaßen verständlich schildern... sorry für den langen Text und jetzt schonmal vielen, vielen Dank für Denkanstöße und Lösungsvorschläge.
Viele Grüße
Uli

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einfügen von Zeilen per VBA mit Bedingungen
08.06.2016 14:36:09
Zeilen
Hi Armin,
besten Dank für deine Antwort und Mühe! Das sieht echt professionell aus, was du da auf die Schnelle geschrieben hast! Ursprünglich wollte ich ohne Userformen auskommen. Vielleicht hat jemand noch eine Idee, und und wie dies möglich wäre?
Trotzdem ist dein gewählter Ansatz super und flexibel. Ich muss mal schauen, inwieweit ich deinen Code im Detail verstehe und ihn noch etwas für meine Bedürfnisse zurecht biegen kann... mit weiteren Fragen würde ich mich dann ggf. melden. :)
Vielen Dank soweit schonmal!
Uli

Anzeige
Ohne UserForm...
08.06.2016 16:49:24
Michael
Hallo Uli,
...ist mir noch das eingefallen: https://www.herber.de/bbs/user/106097.xlsm
Das ist halt eine ziemlich mühsame Spielerei, weil Du in der Ausgangstabelle eigentlich keinen sinnvollen Aufbau hast um damit zu rechnen bzw. Datenmanipulationen zu betreiben, sondern sehr viel auf die optische Aufbereitung Wert legst. Insofern ist dieser, mein Versuch eben auch nur eine sehr verquere Möglichkeit, das zustande zu bringen, was Du Dir vorstellst (so hoffe ich).
Gib Bescheid!
LG
Michael

AW: Ohne UserForm...
08.06.2016 17:08:32
UK
Hi Michael,
auch dir vielen Dank! Naja, also wie soll ich sagen - das Ergebnis deines Makros ist genau das, was ich mir vorgestellt habe - also grandios :). Ob dein Code nun verquer ist, kann ich leider nicht beurteilen - aber er funktioniert ;). Problematisch könnte es bestimmt werden, wenn die Eingabemöglichkeiten der Datei noch erweitert werden sollen. Ich fürchte, dass dies der Fall sein wird. Dann muss ich schauen, ob ich den Code zumindest ansatzweise nachvollziehen und modifizieren kann.
Die Tragweite der Optik (Leerzeilen/Spalten..) war mir so nicht bewusst. Du meinst, dass die Weiterverarbeitung der Daten so viel einfacher wäre, wenn man in A1 mit der Eingabe startet ohne Leerspalten/-zeilen? Ggf. müsste man dies dann in Erwägung ziehen. "Leider" soll es sich bei Tabellenblatt um ein Eingabeblatt für "normale" Nutzer handeln, die eher Wert auf Optik legen als auf den Code dahinter :). Falls du jedoch Tipps hast, wie die Ausgangstabelle sinnvoller aufgebaut sein sollte, gerne her damit. Vielleicht kann ich das ein oder andere noch umsetzen.
Vielen, vielen Dank aber nochmal für den Code! Falls Fragen aufkommen, würde ich mich vertrauensvoll nochmal an euch wenden.
Viele Grüße und einen schönen Abend
Uli

Anzeige
Naja...
08.06.2016 17:42:52
Michael
Uli,
bzgl. Du meinst, dass die Weiterverarbeitung der Daten so viel einfacher wäre, wenn man in A1 mit der Eingabe startet ohne Leerspalten/-zeilen?
kann ich nur sagen, dass Dein Projekt aktuell "von hinten" geplant wirkt - also zuerst "von der Optik" her eingerichtet, und dann kommen nach und nach die "harten" Anforderungen, wie Berechnungen, unterschiedliche Eingabemöglichkeiten etc. Oft bietet es sich an, das ganze umzudrehen: also zuerst überlegen, welche Funktionen das Ganze erfüllen soll, und wenn es denn sein muss, am Schluss noch optisch "aufgehübschte" Ausgabemöglichkeiten einzuplanen. Du hast Dir dafür ja selbst ein Bsp gegeben: Du hast eine "schöne" Tabelle aufgebaut, kommst aber nachher zum Schluss, dass diese für die Anforderung PivotTabelle völlig ungeeignet ist...
Falls du jedoch Tipps hast, wie die Ausgangstabelle sinnvoller aufgebaut sein sollte, gerne her damit
Sowas ist schwierig, wenn Deine konkreten Anforderungen etc. nicht bekannt sind. Notfalls wirst Du Dich, wie vermutlich wir alle zum einen oder anderen Zeitpunkt, von Version zu Version der Datei "durchstolpern" weil Du eben nach und nach selbst Ver- bzw. Nachbesserungen einpflegst ;-).
Bei einzelnen Themen etc. kannst Du Dich ja wieder ans Forum wenden!
Schönen Feierabend!
Michael

Anzeige
AW: Naja...
09.06.2016 10:27:36
UK
Hi Michael,
aus Sicht der Funktionen und der Programmierung ist es sicherlich "von hinten her" gedacht, da hast du Recht. Und das mit dem "durchstolpern" ist auch sehr treffend formuliert, genauso fühle ich mich :D Aber es macht Spaß...
Darf ich dich noch um einen, bzw. zwei Gefallen bitten? 1.) würdest du deinen Code mit dem ein oder anderen Kommentar versehen, damit ich - wenn ich Veränderungen vornehme - weiß, an welcher Stelle ich "pfuschen" muss? 2.) könntest du mir den Code so umschreiben, dass vor dem Kopieren der Daten in Tabelle2 nicht die gesamten Inhalte in Blatt2 gelöscht werden, sondern nur die Inhalte in den Spalten "A" bis "F"? Ich habe es versucht mit:

With WsZ
If .AutoFilterMode Then .AutoFilterMode = False
.Columns("1:6").ClearContents
End With

anstatt
With WsZ
If .AutoFilterMode Then .AutoFilterMode = False
.Cells.ClearContents
End With

Löst aber eher Chaos aus, als dass es mir das gewünschte Ergebnis bringt... :)
Danke und Gruß
Uli

Anzeige
AW: Naja...
09.06.2016 11:32:53
Michael
Hallo!
Hier meine letzte Datei nochmal ergänzt und auskommentiert: https://www.herber.de/bbs/user/106113.xlsm
Bitte beachte den Hinweis im Kommentar bzgl. nur Spalten A:F löschen...
Viel Spaß beim Tüfteln (besser als Pfuschen mE ;-) ) mit dem Code!
LG
Michael

AW: Naja...
13.06.2016 10:13:01
UK
Hi Michael,
vielen Dank für deine ausführlichen Kommentare im Code! Das hilft mir ungemein weiter, auch um zu lernen... hatte seit Donnerstag keine Zeit mehr für das "Projekt", deshalb melde ich mich erst jetzt. Anhand der Lösung des "Bereich-Kopierens" wird mir nun auch die Problematik bewusst, dass aus Blatt 1 Daten kopiert und dann Zeilen&Spalten wieder gelöscht werden müssen (aus den besagten optischen Gründen). Dadurch macht auch das Löschen und Kopieren eines festen Bereichs keinen Sinn. Ich kann die Zieldatei ohnehin nicht für weitere Daten verwenden, da ja bei jedem Kopiervorgang Zeilen/Spalten gelöscht und verschoben werden. :) Schon wieder was gelernt... ;)
Ich werde nun die Version verwenden, in der das ganze Tabellenblatt gecleared wird, nicht nur der bestimmte Bereich. Da ich die Daten im Zielblatt weiterverarbeiten will, muss ich sie dann eben nochmals kopieren in ein anderes Blatt, wo ich sie mit weiteren Daten zusammenführe. Das sollte aber klappen. Ich denke, da bin ich dann auch mitten drin im "Tüfteln" (meiner Ansicht nach passt "pfuschen" immer noch besser :)).
Vielen Dank nochmal und eine gute Woche!
Uli

Anzeige
Gerne, Dir auch! owT
13.06.2016 13:07:22
Michael

347 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige