Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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
VBA mehrere Datenblätter kopieren
12.01.2022 06:42:56
Verena
Hallo,
ich habe in der Arbeit ein Projekt, das ich mit VBA verwirklichen möchte und mir dadurch eine Arbeitszeit ersparen könnte. Ich arbeite in der Arbeit mit Office 2013 und muss auch dazu sagen, dass ich erst vor ein paar Tagen mit VBA angefangen habe und somit ein absoluter VBA-Anfänger bin!
Ich habe 8 Tabellenblätter
Montag/Dienstag/Mittwoch/Donnerstag/Freitag/Samstag/Sonntag/Übersicht
In einzelnen Tagen trage ich jeden Tag ein, wo meine Mitarbeiter gewesen sind. Ich möchte nun die einzelnen Tabellenreiter am Ende der Woche zusammenfassen und einen Block in den Tabellenreiter Übersicht übertragen aber nur wenn eine Bedingung im jeweiligen Tabellenblatt erfüllt ist..
Ich habe es bisher nur hinbekommen per Marko eine Zeile in die Übersicht zu übertragen. Ich stehe jetzt irgendwie vor dem Problem auch einen ganzen Block zu übertragen. Es könnte natürlich sein das ich es mir etwas umständlich gemacht habe beim Code aber ich stehe erst am Anfang mit meinen VBA Kenntnissen.
Hat jemand eine Idee oder kann mir da weiterhelfen?
Liste:
https://www.herber.de/bbs/user/150344.xlsm
Und der Code:

Private Sub CommandButton1_Click()
Dim lngZeile As Long
Dim lngErste As Long
With Worksheets("Übersicht")
For lngZeile = 5 To 50
If Worksheets("Montag").Cells(lngZeile, 1) = "Montag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Montag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Dienstag").Cells(lngZeile, 1) = "Dienstag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Dienstag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Mittwoch").Cells(lngZeile, 1) = "Mittwoch" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Mittwoch").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Donnerstag").Cells(lngZeile, 1) = "Donnerstag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Donnerstag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Freitag").Cells(lngZeile, 1) = "Freitag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Freitag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Samstag").Cells(lngZeile, 1) = "Samstag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Samstag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
For lngZeile = 5 To 50
If Worksheets("Sonntag").Cells(lngZeile, 1) = "Sonntag" Then
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Worksheets("Sonntag").Rows(lngZeile).Copy .Cells(lngErste, 1)
End If
Next lngZeile
End With
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 07:17:24
Oberschlumpf
Hi Verena
versuch mal
https://www.herber.de/bbs/user/150345.xlsm
In allen Formeln, in denen z Bsp ISTLEER() verwendet wird, solltest du - nicht " " - folgen lassen, sondern nur "" ohne Leerzeichen
Beachte auch die Kommentare im Code.
Wenn du noch weitere Fragen hast, frag ruhig.
Konnte ich denn helfen?
Ciao
Thorsten
AW: VBA mehrere Datenblätter kopieren
12.01.2022 07:59:16
Verena
Vielen, vielen Dank! Das hilft mir schon super!
Das hilft mir schon super weiter! Und ist auch viel weniger Code, da hab ich es mir wohl etwas zu kompliziert gemacht.
Eine Frage habe ich aber noch ich möchte ja den ganzen Block kopieren, jetzt habe ich in der For Schleife das Step 4 weg genommen und das klappt auch.
Jedoch möchte ich nur die Blöcke kopieren in denen in Spalte A der Wochentag vorkommt. (Also z.B. Montag kommt in Spalte A vor und dann soll er diesen ganzen Block kopieren)
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 08:13:21
Oberschlumpf
Hi Verena,
füg in For/Next das Step 4 wieder ein und änder dann diese Zeile...

lshWeekday.Range("A" & lloRow & ":E" & lloRow).Copy .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
...um in...

lshWeekday.Range("A" & lloRow & ":E" & lloRow + 3).Copy .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
Step 4 sorgt ja dafür, dass nach jedem ...Next die nächst-vierte Zeile überprüft (und wenn Bedingung = WAHR auch kopiert + eingefügt) wird.
Der Zusatz + 3 kopiert nun nicht mehr nur den Bereich A9:E9, sondern den Bereich A9:E9+3, oder anders A9:E12; somit also den ganzen Block - vorausgesetzt, die Anzahl Zeilen pro Block ändert sich nicht und ist überall gleich; wenn doch, musst du den Code anpassen.
Hilfts?
Ciao
Thorsten
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 09:11:43
Verena
Klasse! Hat super geholfen! Danke für die Hilfe!
AW: VBA mehrere Datenblätter kopieren
12.01.2022 07:50:06
MCO
Guten Morgen, Verena!
Manche Dinge kommen mit der Zeit, einige Anmerkungen vorab:
Wenn doch die Sheets alle mit Wochentagen benannt sind, warum muss man die dann auf dem Blatt eintragen? Überflüssig, denn der Wochentag wird durch das Datum mit definiert.
Auf den Wochentag-Blättern ist die Formel "=WENN(ISTLEER(B9);" ";TEXT(WOCHENTAG(B9;1);"TTTT"))" hinterlegt. Warum hast du das nicht mit der Zellformatierung gemacht? Warum ist bei ISTLEER ein Leerzeichen (" ") statt NULLSTRING("")?
In der Übersicht werden die Formeln mit in Blatt kopiert. Da du in der LÖSCHEN-Prozedur aber nur die Spalten B-E löschst, bleiben die stehen und bei der ermittlung der lngErste wird die falsche Zeile ausgebebn. Es muss auch Spalte A gelöscht werden. Die Spalten können in einem Bereich zusammengefasst werden.
Weiter Ansatz:
Schleife über alle Sheets, Spalte "B": Wenn Datum, dann Datensatz kopieren. Ende.
In Code sieht das Gesamtwerk dann so aus:

Private Sub CommandButton1_Click()
Dim lngZeile As Long
Dim lngErste As Long
With Worksheets("Übersicht")
For sht = 1 To Sheets.Count - 1 'alle Sheets durchgehen bis auf den letzen
Set Rng = Sheets(sht).Range("B:B").SpecialCells(xlCellTypeConstants) ' nur gefüllte Zellen in B beachten
For Each cl In Rng 'Zellen durchgehen
If IsDate(cl) Then 'wenn Datum dann...
lngErste = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 'nächste freie Zeile in "Übersicht"
Sheets(sht).Range("A" & cl.Row & ":E" & cl.Row).Copy
.Cells(lngErste, "A").PasteSpecial (xlPasteValuesAndNumberFormats) 'Datensatz kopieren, nur Werte und Formate!
End If
Next cl
Next sht
.Range("A9").CurrentRegion.Borders().Weight = xlThin 'Rahmen für "Übersicht"
End With
End Sub

Private Sub CommandButton2_Click()
Worksheets("Übersicht").Range("A9:E500").Clear 'Gesamten Tabellenbereich löschen, inkl aller Formatierungen
End Sub
Viel Erfolg!
Gruß,MCO
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 08:16:14
Verena
Danke für die Rückmeldung..
Der Ansatz ist auch super und viel weniger Code als ich es habe. Und verständlich! Danke dir!
Mit deinen Anmerkungen hast du natürlich absolut recht! Würde ich mal als klassischen Anfänger Fehler bezeichnen ^^ War mir aber gar nicht so bewusst.
Du kopierst ja hier auch nur immer Zeilen weise. Kann ich den Code auch so um gestalten das nicht nur die Zeile mit dem Datum ausgegeben wird. Sondern der ganze Block (also die 3 da drunter liegenden Zeilen)
AW: VBA mehrere Datenblätter kopieren
12.01.2022 08:29:24
MCO
Hi!
Nicht einfacher als das ;-)
Ändere

Sheets(sht).Range("A" & cl.Row & ":E" & cl.Row).Copy
in

Sheets(sht).Range("A" & cl.Row & ":E" & cl.Row+3).Copy
Gruß, MCO
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 09:13:47
Verena
Super, vielen Dank! Hätte ich auch irgendwie selbst drauf kommen können!
Ich werde bestimmt nochmal eine Frage zu VBA haben aber für das erste wurden meine Fragen beantwortet!
Danke nochmal!
AW: VBA mehrere Datenblätter kopieren
12.01.2022 10:09:06
Verena
Tut mir leid dass ich dich nochmal stören muss aber kann ich auch fest legen, dass die kopierten Daten erst ab Stelle x eingefügt werden sollen? Z.B ab Zeile A10?
Danke und tut mir leid das ich schon wieder eine Nachfrage habe..
AW: VBA mehrere Datenblätter kopieren
12.01.2022 10:15:20
MCO
Klar:
Tausche
lngErste = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
in
lngErste = WorksheetFunction.Max(10, .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
Klartext: Nimm das grösste aus Zeile 10 oder nächste freie Zeile
Nebenbei: Wenn du eine Rückfrage hast, dann setzt das Häkchen bei "Frage noch offen"
Ansonsten ist es eher Zufall, das der Beitrag beantwortet wird....
Gruß, MCO
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 08:29:34
Verena
Danke für die Rückmeldung..
Der Ansatz ist auch super und viel weniger Code als ich es habe. Und verständlich! Danke dir!
Mit deinen Anmerkungen hast du natürlich absolut recht! Würde ich mal als klassischen Anfänger Fehler bezeichnen ^^ War mir aber gar nicht so bewusst.
Du kopierst ja hier auch nur immer Zeilen weise. Kann ich den Code auch so um gestalten das nicht nur die Zeile mit dem Datum ausgegeben wird. Sondern der ganze Block (also die 3 da drunter liegenden Zeilen)
AW: VBA mehrere Datenblätter kopieren
12.01.2022 09:05:12
Yal
Hallo Sabine,
Excel erlaubt vieles, aber nicht nicht viel davon ist günstig zu weiterberarbeiten.
Du möchtest VBA lernen. Finde ich gut. Aber VBA ist nicht unbedingt ein Ersparnis an Arbeitszeit.
Also wichtig ist die Organisation der Daten (Datenhaltung), sodass diese leicht zusammengefasst oder ausgewertet werden.
Ich würde nicht 7 in Tage erfassen sondern alles in einem Blatt.
Spalte Datum gibst Du die benutzerdefinierte Datenformatierung TTT. TT.MM.JJJJ
Dann hast Du den Tag und brauchst die Spalte A nicht (Formel gespart).
Kunden, Stadt und Strasse sind die Überschrift von 3 Spalten.
So hast Du in eine einzige Zeile alle Daten zusammen, die ein Eintrag definieren (in Datenbank-Jargon: Datensatz)
Vorteil: Du kannst jederzeit beliebig filtern und sortieren. Da die Daten zusammenhängen, bleiben sie zusammen. Das ist Zeitersparnis.
Dann die Tabelle als aktive Tabelle umwandeln (oder oft benannt "intelligente Tabelle") : Einfügen, Tabelle
Somit sind die Filterungsmöglichkeit mitgeliefert und hat das Vorteil, dass darauf zuverlässige Pivottabelle gebaut werden können.
Pivottabelle? Im Menü Einfügen, Pivottabelle auswählen.
Dann rumspielen.
VG
Yal
Anzeige
AW: VBA mehrere Datenblätter kopieren
12.01.2022 10:19:26
MCO
Hallo Yal!
Zwei Dinge:
  • Deine Anregung find ich gut, hättest du nicht auch schon eine geänderte Mappe hochladen können?

  • Wer ist Sabine? ;-)

  • Gruß, MCO
    Mit Datei
    12.01.2022 11:57:56
    Yal
    ... Sabine Musterfrau. Is' doch klar.
    Hallo zusammen,
    mein G'schwätz von vorher, aber diesmal mit einer Datei.
    _ Alle Information Spalten organisiert
    _ in einer filterbare/sortierbare aktive Tabelle, sodass die Formal für Wochen sich automatisch einfügt, wenn eine zusätzliche Datensatz dazukommt
    _ eine Pivottabelle + Pivotchart (mit Rechtsklick auf "Aktualisieren")
    Voilà
    https://www.herber.de/bbs/user/150348.xlsm
    Auf einer Rückmeldung freuen wir uns immer.
    VG
    Yal
    Anzeige

    310 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige