Alle Tabellenblätter in ein neues Kopieren - Makro

  • #1
S

Seb

Guest
Hallo!

Ich habe eine Datei, die mehrere Tabellenblätter beinhaltet, die täglich aktualisiert werden. Jetzt möchte ich am Ende des Tages alle Blätter in einem Zusammenfassen. Wie kriege ich das am geschicktesten mit einem Makro hin? Würde mich über eure Hilfe sehr freuen!

Thx & Gruß
Seb
 
  • #2
Ola,

du richtest die einmal ein Zusammenfassendes Tabellenblatt ein und verwendest dabei dynamische 3d-Bezüge (siehe Hilfe). Dann brauchst du die Tabellenblätter, immer nur in den Bereich zu ziehen. Voraussetzung ist (auch für ein Makro), dass die Tabellenblätter identisch aufgebaut sind.
 
  • #3
Hallo Seb,

mit dem folgenden Makro sollte das zu erledigen sein. Er fasst alle Tabellenblätter der aktuellen Arbeitsmappe in einem zusätzlichen Blatt->Zusammenfassung' zusammen.

Unter ANPASSEN müßtest du die konstanten entsprechend deiner Werte anpassen.

Gruß Matjes :)
Code:
Option Explicit
'Makro zum Zusammenfassen aller Blätter der aktiven Arbeitsmappe auf einem
'neuen Blatt->Zusammenfassung'
'Voraussetzung: Alle Blätter haben die gleiche Spaltenstruktur Bedeutung/Format
'
'<<< A N P A S S E N >>>
'ZeileNr vor der erster Zeile mit zu übertragenden Werten, hier also eine Überschriftenzeile
Private Const cZ_ZeileVorErsterWerteZeile = 1
'Name des Zusammenfassungs-Blattes
Private Const cBLT_NAME_ZUS = Zusammenfassung
'<<< A N P A S S E N  E N D E >>>


Sub AlleBlaetterZusammenfassen()
 Dim wb As Workbook, ws As Worksheet, wsz As Worksheet
 Dim lRows As Long, lCols As Long, z As Long

 Set wb = ActiveWorkbook
->pruefen, ob es schon ein Blatt->Zusammenfassung' gibt
 On Error Resume Next
 Set ws = wb.Worksheets(cBLT_NAME_ZUS)
 On Error GoTo 0
 If Not ws Is Nothing Then
  MsgBox ein Blatt nit Namen  & cBLT_NAME_ZUS &  ist bereits vorhanden.
  GoTo AUFRAEUMEN
 End If
 
->erstes Blatt als Grundlage für Zusammenfassung kopieren
 Set ws = wb.Worksheets(1)
 ws.Copy Before:=ws
 
->Zusammenfassungsblatt setzen
 Set wsz = wb.Worksheets(1)
 wsz.Name = cBLT_NAME_ZUS

->Über alle Blätter
 z = cZ_ZeileVorErsterWerteZeile
 For Each ws In wb.Worksheets
  If ws.Name <> cBLT_NAME_ZUS Then
   Call LetzteZeileSpalteBestimmen(ws, lCols, lRows)
   If lRows > cZ_ZeileVorErsterWerteZeile Then
    ws.Range( _
     ws.Cells(cZ_ZeileVorErsterWerteZeile + 1, 1), _
     ws.Cells(lRows, lCols) _
     ).Copy
    z = z + 1
    wsz.Range(wsz.Cells(z, 1), wsz.Cells(z, 1)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    z = z + lRows - cZ_ZeileVorErsterWerteZeile - 1
   End If
  End If
 Next
AUFRAEUMEN:
 Set wb = Nothing: Set ws = Nothing: Set wsz = Nothing
End Sub


Function LetzteZeileSpalteBestimmen(ws As Worksheet, lCols As Long, lRows As Long)
 Dim lZeile As Long, lSpalte As Long, bLeer As Boolean
 lCols = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1
 lRows = 0
 For lSpalte = 1 To lCols
  lZeile = ws.Cells(ws.Rows.Count, lSpalte).End(xlUp).Row
  If lRows < lZeile Then lRows = lZeile
 Next
 If lRows = 1 Then
 ->zusätzlich die erste Zeile auf Inhalt überprüfen,
  bLeer = True
  For lSpalte = 1 To lCols
   If ws.Cells(1, lSpalte).Value <>  Then bLeer = False: Exit For
  Next
  If bLeer Then lRows = 0
 End If
End Function
 
  • #4
Hi!

Danke erst mal PCDjoe. Die Lösung von Matjes scheint mir am komfortabelsten :) THX a lot! Verstehe nur noch nicht ganz genau, das die erste Anpassungsmöglichkeit bietet. Wenn dort 1 steht, kopiert er einmal die Kopfzeile am Anfang der Zusammenfassungsdatei und dann nicht wieder? Wenn da 0 oder 3 steht, was genau wird verändert? Er schneidet dann die ersten drei Zeilen ab beim kopieren?

Vielen Dank für deine Mühe!
Grüße Seb
 
  • #5
Hallo Seb,

cZ_ZeileVorErsterWerteZeile gibt die Anzahl der Zeilen an, die beim Kopieren ausgelassen werden. Also 0 - keine, 3 - die ersten 3, ...

Das dient dazu, die Überschriften nicht mitzukopieren. Die werden nämlich beim Anlegen des Blattes->Zusammenfassung' einmalig übernommen, das durch Kopieren des ersten Blattes entsteht.

Gruß Matjes ;)
 
  • #6
oki! Wunderbar, genau das was ich gebraucht habe, danke dir!

Gruß
seb
 
Thema:

Alle Tabellenblätter in ein neues Kopieren - Makro

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben