Anzeige
Archiv - Navigation
1732to1736
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

Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen

Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen
09.01.2020 19:20:39
Albert
Hallo und schönen guten Abend zusammen,
ich bräuchte bitteschön eure Hilfe, da ich mit meinen bescheidenen Excelkenntnissen mein Problem nicht lösen kann. Vielleicht ist es auch nur mit Hilfe von VBA zu lösen - und da tendieren meine Kenntnisse gegen Null!
Folgendes Problem: Bei einer Excelliste mit Vereinsmitgliedern habe ich 2 Tabellenblätter (Stunden / geleistet)
Auf dem Blatt Stunden ist der Name des Mitglieds aufgeführt und wie viele Pflichtstunden es für den Verein leisten sollte. Auf Blatt "geleistet" werden die Mitglieder aufgeführt, die ihre Stunden schon abgeleistet haben.
Bsp: Auf Blatt "Stunden" hat Mitlied Müller in Spalte D 20 Stunden zu leisten. Ich trage in Spalte F 15 Stunden ein und Mitglied Müller bleibt auf dem Blatt Stunden mit 5 Reststunden.
Mitglied Maier muss ebenfalls 20 Stunden ableisten und hat seine 20 Stunden schon erbracht. Ich trage also in Spalte F die Zahl 20 ein und jetzt soll das Mitglied Maier auf Blatt 1 gelöscht und dafür auf Blatt 2 (wenn möglich alphabetisch sortiert) eingefügt werden. Dies kann auch gerne mit einem Schaltflächenbefehl am Ende aller Eingaben des Tages erfolgen. Ist sowas mit Excel möglich oder braucht es dazu dann doch VBA?
Wäre schön, wenn mir jemand helfen könnte. Im Voraus schon mal ein herzliches Dankeschön :-)
Hier eine Beispieldatei "Mitglied"
https://www.herber.de/bbs/user/134282.xlsx

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dazu nur folgende Anmerkungen ...
09.01.2020 19:37:47
neopa
Hallo Albert,
... wäre bedingt mit Formeln zu realisieren. Jedoch in Deiner Beispieldatei stehen im Tabellenblatt "geleistet" schon Namen, die in "zu leisten" nicht mehr gelistet sind. Wenn Du dies so künftig weiter beibehalten willst, kommt nur VBA in Frage.
Wenn Du aber alle Namen im Basisdatenblatt und dort die Daten pflegst, brauchst Du weder eine VBA noch eine Formellösung noch eine andere Lösung (z.B. mit PowerQuery), sondern da reicht einfach der Autofilter (z.B. über die F oder G) um Dir den notwendigen Überblick schnell zu verschaffen.
Gruß Werner
.. , - ...
AW: dazu nur folgende Anmerkungen ...
09.01.2020 20:57:00
Albert
Hallo Werner,
danke für deine Zeit und deine Anmerkungen. Bisher hatte ich das genau so gelöst - also über Filtern und kopieren der sichtbaren Zeilen. Aber ich brauche auch dann immer wieder eine neue Sortierung nach Datum und verbliebenen Reststunden, Summe der verbliebenen Reststunden etc. - und daraus resultierend dann eben der Wunsch, alle Mitglieder, die ihren Beitrag geleistet haben, aus der Liste1 zu nehmen. Und diese immer wie bisher "händisch" über sortieren, ausschneiden ,in Liste2 einfügen und erneutes sortieren der Liste 2 zu aktualisieren... nun ja. Zumal die Liste weit über 400 Namen enthält. Ich hatte gehofft, dass es eben schneller und einfacher zu lösen wäre.
Anzeige
Lösung mit VBA
10.01.2020 07:50:06
Stefan
Hallo Albert,
ich hab dir das jetzt mal mit VBA gelöst, ich hoffe das war so wie du es wolltest, sonst meldest dich nochmal.
Ich hab dir einen Button eingefügt, welcher bei Klicken das Makro startet.
https://www.herber.de/bbs/user/134293.xlsm
Gruß
Stefan
AW: Lösung mit VBA
10.01.2020 10:43:20
Albert
Hallo Stefan,
herzlichen Dank für deine Mühe.
Leider läuft das Makro bei mir nicht durch. Es bricht ab mit der Meldung:
Laufzeitfehler 1004
Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.
Beim Debuggen wird mir die Zeile
Sheets("zu leisten").Range("A2").Select gelb hinterlegt angezeigt. Und auch der Button ist danach verschwunden. Kannst du bitte nochmals draufschauen?
Anzeige
AW: Lösung mit VBA
10.01.2020 10:59:06
Stefan
Hallo Albert,
ich habs bei mir getestet, da läuft alles, hab aber zur Sicherheit nochmal eine Zeile eingefügt.
Zur Erklärung wegen dem Button:
Der Button war ein wenig zu groß und wurde deshalb mit an die zweite Zeile "angeheftet" also wenn du Zeile zwei ausschneidest und in dem Tabellenblatt "geleistet" einfügst, ist er mit gewandert, hab ihn etwas kleiner gemacht.
https://www.herber.de/bbs/user/134297.xlsm
gruß Stefan
AW: Lösung mit VBA
10.01.2020 12:13:35
Albert
Es läuft :-). Jetzt muss ich das nur noch unfallfrei in meine Originaldatei einbauen. Vielen vielen Dank, Stefan. Schön, dass es solche hilfsbereite Menschen gibt.
Anzeige
AW: Lösung mit VBA
10.01.2020 13:34:23
Albert
Hallo Stefan,
darf ich dich nochmals belästigen und was nachfragen (und dir vielleicht Arbeit machen)?
Ich habe das Makro jetzt in meine Originaldatei eingebaut und ausprobiert. Zuerst die positive Nachricht: Es läuft und tut genau das, was ich eingefordert hatte. Allerdings habe ich nicht bedacht, dass ich (nach einer Leerzeile) auf jedem Tabellenblatt die Anzahl der zu leistenden Stunden bzw. die Anzahl der bereits geleisteten Stunden aufsummiere. Wenn das Makro jetzt die verbliebenen Zeilen auf Blatt1 und die neu hinzugekommenen Zeilen auf Tabellenblatt2 neu sortiert, werden diese Summenzeilen mit in meine Aufstellung "einsortiert" und nicht mehr am Ende unterhalb der Liste dargestellt.
Ich könnte natürlich diesen Summen jeweils ein ZZ vorstellen, so dass sie immer unten erscheinen - aber ich denke mal, dass dies auch noch per VBA zu lösen wäre?
Wäre schön, wenn dem so wäre :-)
Anzeige
AW: Lösung mit VBA
10.01.2020 14:08:36
Albert
Hallo Stefan,
darf ich dich nochmals belästigen und was nachfragen (und dir vielleicht Arbeit machen)?
Ich habe das Makro jetzt in meine Originaldatei eingebaut und ausprobiert. Zuerst die positive Nachricht: Es läuft und tut genau das, was ich eingefordert hatte. Allerdings habe ich nicht bedacht, dass ich (nach einer Leerzeile) auf jedem Tabellenblatt die Anzahl der zu leistenden Stunden bzw. die Anzahl der bereits geleisteten Stunden aufsummiere. Wenn das Makro jetzt die verbliebenen Zeilen auf Blatt1 und die neu hinzugekommenen Zeilen auf Tabellenblatt2 neu sortiert, werden diese Summenzeilen mit in meine Aufstellung "einsortiert" und nicht mehr am Ende unterhalb der Liste dargestellt.
Ich könnte natürlich diesen Summen jeweils ein ZZ vorstellen, so dass sie immer unten erscheinen - aber ich denke mal, dass dies auch noch per VBA zu lösen wäre?
Wäre schön, wenn dem so wäre :-)
Anzeige
AW: verbesserter Code für Stefan von Piet
11.01.2020 15:10:10
Piet
Hallo Albert
schön das dir Stefan geholfen hat, freut mich. Normalerweise gehe ich dann in einen Thread nicht rein. Es sei denn ich sehe auf Grund von Wissen und Erfahrung, das eine Sache nicht 100% klappt. Dann erlaube ich mir unterstützend mit zu helfen. Ich denke mein verbesserter Code von Stefan müsste jetzt Optimal laufen.
Hinweis:
Ich stelle als Praktiker Summenformeln lieber ganz nach oben! In die 2. Zeile! Bei über 1000 Kunden sucht man sonst wie verrück, muss scrollen ohne Ende, um am Abend die Gesamtsaumme zu sehen. Ist da NICHT sinnvoll! Wenn dir die Formel unten lieber ist muss im Sortier Makro nur an zwei Stellen "A3" auf "A2" geaendert werden: Range("A3 = Range("A2 - dann klappt es.
Zur Funktion:
Wenn die Stunden in einem Rutsch geleistet werden wird diese Zeile in "zu leisten" komplett gelöscht! Bleiben Reststunden übrig werden nur die Reststunden angezeigt. Die geleisteten in "geleistet" aufgelistet. Dadurch kann es passieren das in "geleistet" ein Name mehrfach vorkommt. Das Zahlen-Format habe ich in "geleistet" so eingestellt, das Mehrstunden in Rot erscheinen.
@Stefan - ich sehe das du noch neu im Forum bist, freut mich Kollege. Wir "alten Hasen" verzichten aber auf alle Select Anweisungen! Egal ob Sheet oder Range. Weil es viel sauberer und schneller ohne programmiert werden kann. Zum eleganten VBA lernen habe ch mein Makro gut dokumentiert. Resize benutze ich um Bereiche zu erweitern. Ein interessanter Befehl, wenn man ihn kennt.
Bitte den Thread schliessen, Haeckchen nicht setzen, wenn der Thread zufriedenstellend beendet ist.
https://www.herber.de/bbs/user/134322.xlsm
mfg Piet
PS für Stefan: - mein Programm wurde auf einem uralten XP Laptop mit 12 Zell Bildschirm geschrieben. Ich nehme an das du einen besseren PC hast. Du siehst aber, nicht der PC entscheidet über die Qualitaet eines Codes, sondern Wissen udn Erfahrung des Programmierers. In diesme Sinne guten Lernerfolg ...
Anzeige
AW: verbesserter Code für Stefan von Piet
11.01.2020 21:09:22
Piet
Hallo und schönen Abend Piet,
recht herzlichen Dank auch für deine viele Arbeit und deine Vorschläge. Erst war ich etwas verwirrt, dass die Daten bei der richtigen Anzahl der Stunden nicht auf "geleistet" übertragen werden. Bis ich bemerkt habe, dass die Stunden auch an das Datum geknüpft sind.Das mit dem teilweisen Übertragen finde ich sehr gut, da habe ich dann eine korrekte Summe, was schon geleistet wurde.
Allerdings traten bei mir jetzt folgende Ungereimtheiten auf:
Negative Werte werden bei mir nicht - wie du angedeutet hast - rot dargestellt.
Und die Zeilen im Tabellenblatt2 "geleistet" scheinen auf 10 begrenzt zu sein (oder die Sortierung läuft unrund?), da ich nicht mehr als 10 Mitglieder auf dem Tabellenblatt2 "geleistet" aufgelistet bekomme. Der letzte Name wird immer nur noch gegen den neuen ausgetauscht.
Kannst du bitte nochmals drüberschauen, woran das liegt?
Ich kann zwar mit Hilfe deiner Beschreibung nachvollziehen, welcher Ablauf das Makro hat - aber von sinnvollem Verändern bin ich zu weit weg.
Schon mal ein großes Dankeschön vorab :-)
Anzeige
AW: Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen
11.01.2020 16:04:01
Werner
Hallo Albert,
obwohl du jetzt schon eine Lösung von Piet hast, stelle ich meine Version auch noch ein.
Einerseits, weil ich es jetzt schon mal geschrieben habe und andererseits, weil ich einen anderen Weg wähle.
Ich gehe den Weg über ein Worksheet-Change Ereignis im Blatt "zu leisten".
Wenn du dort in Spalte F einen Eintrag machst und das jeweilige Stundensoll erfüllt ist, werden die Daten automatisch ins Blatt "geleistet" verschoben.
Durch den Code werden die Summen in beiden Blättern jeweils am Ende der Tabelle eingefügt.
https://www.herber.de/bbs/user/134323.xlsm
Gruß Werner
Anzeige
AW: Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen
11.01.2020 20:42:55
Albert
Hallo Werner,
recht herzlichen Dank für deine Mühe und die viele Arbeit. Ich habe soeben mal deinen Vorschlag aufgespielt und wollte testen. Aber wenn ich bei einem beliebigen Namen das Datum und dann 20 Stunden eingebe, dann erhalte ich eine Fehlermeldung und das Makro ist an der Stelle
".Sort.SortFields.Add2 Key:=Range("A1") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal"
gelb hinterlegt und hängt.
Der Name wird auf die Tabelle2 "geleistet" übertragen
Woran liegt das und lief es bei dir problemlos durch? Liegt´s an meinem Rechner?
AW: Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen
11.01.2020 21:52:18
Werner
Hallo,
mach mal bei Add2 die 2 weg.
Gruß Werner
Anzeige
AW: Komplette Zeile nach Bedingung auf ein anderes Tabellenblatt übertragen
11.01.2020 22:55:49
Albert
Perfekt :-)
Es funktioniert jetzt besser als ich zu Beginn erwartet habe.
Werner, recht herzlichen Dank an dich und an alle, die mich hier unterstützt und ihre Zeit geopfert haben :-)
Gerne u. Danke für die Rückmeldung. o.w.T.
11.01.2020 23:14:21
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
12.01.2020 16:46:23
Albert
Hallo Werner,
ich habe jetzt ein wenig in meinem Original herumprobiert. Dabei ist mir noch eine Kleinigkeit aufgefallen, die du mir vielleicht noch schnell "ausbessern" könntest. Ich bekomm sowas (noch) nicht hin :-(
Auf dem Tabellenblatt1 geleistet wird am Ende jedes Übertrages die (Gesamt-)Summe ausgegeben. Wenn ich allerdgins zwei oder mehrere Übertragungen habe, habe ich auch 2 oder mehrere Gesamtsummen. Die bisherige Gesamtsumme wird also nicht gelöscht und ersetzt sondern nur hinzugefügt.
Kann ich zwar händisch dann löschen - geht aber mit dem entsprechenden Code einfacher (sofern man eben programmieren kann )
Könntest du bitte nochmals nachschauen? Danke :-)))
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
12.01.2020 17:03:47
Werner
Hallo,
dann entspricht der Aufbau deiner Originaldatei nicht dem Aufbau deiner hochgeladenen Beispielappe.
Es macht keinen Sinn hier eine Mappe hochzuladen, deren Aufbau nicht exakt dem Original entspricht.
Ich kann mich mit meinem Code nur an dem orientieren, was ich vorliegen habe.
Also bitte eine Beispielmappe, die exakt dem Original entspricht.
Gruß Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
12.01.2020 19:55:25
Albert
Nabend Werner,
alles gut. Ich habe da einen Fehler im Aufbau der Tabelle gehabt. Hab ich jetzt behoben - und jetzt läuft es. Und es war vom Aufbau her wie das Original - allerdings etwas verkürzt (von der Zeilenanzahl) und natürlich anonymisiert und etwas vereinfacht. Dankeschön nochmals und entschuldige bitte die nochmalige Nachfrage :-)
Gerne u. kein Problem. o.w.T.
12.01.2020 20:10:41
Werner

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige