Excel: mehrere Tabellenblätter hintereinander zusammenführen (VBA)

buska, Dienstag, 26.05.2020, 18:15 (vor 80 Tagen)

Hallo VBA-Experten,

wisst Ihr wie ich in VBA mit Makro mehrere Tabellenblätter in einer Excel-Datei hintereinander in ein separates Tabellenblatt in selber Excel-Datei zusammenführen kann? Diese zusammengefasste Tabelle benötige ich später für eine Pivot-Auswertung. Die Anzahl der einzelnen Tabellenblätter ändert sich nicht sehr oft, aber es wäre schön wenn es eine Schleife dazu geben kann, die den Indixer (z.B. in Zelle A1 in jedem Tabellenblatt) ausließt - ich könnte einen Zähler in jeder betroffenen Tabelle in Zelle A1 setzten (z.B. 1, 2, 3, 4, usw.,also >0).

Könnt Ihr mir hier helfen?

Viele Grüße
Boris

Excel: mehrere Tabellenblätter hintereinander zusammenführen

Martin Asal @, Dienstag, 26.05.2020, 19:44 (vor 80 Tagen) @ buska

Hallo Boris,

natürlich habe ich keine Ahnung, wie deine Tabellenblätter aufgebaut sind und was genau du daraus kopieren willst. Aber vielleicht hilft die das folgende Grundgerüst:

Sub join()
Dim wb As Workbook, sh As Worksheet
Dim i As Long
 
Set wb = ActiveWorkbook
wb.Sheets.Add    
 
For i = 1 To wb.Sheets.Count - 1    'Bei "1" anfangen, weil wir ja vorne ein neues Sheet haben
    Set sh = wb.Sheets(i)
 
    'Hier muss jetzt die Auswahl eines Bereichs (Range) passieren
    'und anschließend nach wb.Sheets(0) kopieren

Next
 
 
End Sub


Schau dir außerdem mal die Funktion "Erledigt" auf der Einführung zu Excel hier im Tutorial an: Die durchläuft ja eine Liste in einem Blatt. So eine Schleife in der Art wirst du wohl innerhalb der obigen Funktion brauchen, um einen Bereich auszuwählen, und nach dem Loop kannst du den ausgewählten Bereich kopieren. Natürlich musst du dir dann noch merken, bis wohin du kopiert hast, damit beim Kopieren des nächsten Sheets nicht der erste Bereich überschrieben wird.

Martin

Excel: mehrere Tabellenblätter hintereinander zusammenführen

buska, Mittwoch, 27.05.2020, 10:38 (vor 79 Tagen) @ Martin Asal

Danke Martin,

ich bin leider relativ neu in VBA-Coding.Ich versuche die gleichaufgebauten Tabellen aus mehreren Blätter zusammenzuführen.
Daher ist deine Annahme, dass ich ein bestimmen und immer gleichen "Range" (z.B. B4:P50) immer wieder hintereinander kopieren möchte, korrekt. Ich beginne mit dem Blatt Nr. 2 und der VBA-Code muss beim 10. Blatt (kann sich in Zukunft ändern) stoppen.
Wie wähle ich diesen Range aus und wie kann ich die kopierten Bereiche dahinter setzten, ohne die kopierten zu überschreiben?

Das Zielblatt hat immer den gleichen Namen.

Grüße
Boris

Excel: mehrere Tabellenblätter hintereinander zusammenführen

Martin Asal @, Mittwoch, 27.05.2020, 20:56 (vor 79 Tagen) @ buska

Hallo Buska,

ich bin leider relativ neu in VBA-Coding

Das Tutorial ist dafür da, Hilfe zur Selbsthilfe zu geben :-) Deswegen hier ein nur minimal überarbeiteter Code:

Sub join()
Dim wb As Workbook, main As Worksheet, sh As Worksheet
Dim i As Long
 
Set wb = ActiveWorkbook
Set main = wb.Sheets(1)       'Statt "1" geht hier auch der Name des Ziel-Sheets

 
'Jetzt durch alle Sheets durchgehen
For i = 2 To wb.Sheets.Count  'Falls das Zielsheet das erste ist, überspringen
    Set sh = wb.Sheets(i)
 
    main.Range("B1:C4").Value = sh.Range("B1:C4").Value
 
Next
 
End Sub


Natürlich kann main.Range("B1:C4") so nicht bleiben, den String musst du immer nach unten verschieben. Sonst überschreibst du ja immer.

Aber diese Anpassung bekommst du bestimmt selbst hin. Nochmal der Tipp mit der Prozedur "Erledigt", die ja durch einen Bereich hindurchgeht: So eine Schleife kann man leicht umbauen, um herauszubekommen, wie viele Zeilen das Programm nach unten gehen muss, und damit dann den String "B1:C4" duch einen selbst errechneten String zu ersetzen.

Martin

Excel: mehrere Tabellenblätter hintereinander zusammenführen

buska, Donnerstag, 28.05.2020, 17:48 (vor 78 Tagen) @ Martin Asal

Danke Martin,

ich habe es heute so gelöst:

Sub Zusammenstellen()

Dim i As Integer, letztezeile As String

letztezeile = 2

For i = 2 To 5 ' oder hier die Zahl der letzten Daten-Tabelle

Worksheets("Sammel").Range(Cells(letztezeile, 2), Cells(letztezeile + 59, 34)).Value = Worksheets(i).Range("B10:AH69").Value
letztezeile = letztezeile + 59

Next i
End Sub

RSS-Feed dieser Diskussion
powered by my little forum