Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

Daten aus Tabelleenblättern zusammenfassen

Daten aus Tabelleenblättern zusammenfassen
03.09.2016 12:04:07
Heinz
Hallo Liebe Excellenten,
ich habe es - mit großer Mühe - geschafft,
folgendes Makro zu basteln.
Ausgangspunkt ist eine Datei mit x Tabellenblätter, auf denen
Tabellen in der gleichen Struktur, Länge und Breite enthalten sind.
Das Makro:
... fügt in eine Datei ein Tabellenblatt ein,
... kopiert die ersten Zeilen des ersten Tabellenblattes mit Daten
... kopiert aus jedem Datenblatt die Daten und fügt sie im
neuen Tabellenblatt zusammen.
Sub zusammenfassen()
Dim Zeile As Long
Dim letzteZ As Long
Dim AnzahlBlaetter As Byte
Dim i As Integer
'Auswertungsblatt einfügen
Worksheets.Add.Name = "Zusammenfassung"
ActiveSheet.Move Before:=Worksheets(1)
'Anzahl der Arbeitsblätter ermitteln
AnzahlBlaetter = ThisWorkbook.Worksheets.Count
'Die ersten 4 Kopzeilen kopieren
With ThisWorkbook.Worksheets(2)
.Range("A2:W4").Copy Worksheets("Zusammenfassung").Range("A2")
Range("A1").Select
ActiveCell.FormulaR1C1 = "Gesamt"
Selection.Font.Bold = True
Selection.Font.Size = 14
End With
'Von Blatt 2 bis Blatt zum letzten Blatt zusammenfassen
For i = 2 To AnzahlBlaetter
With ThisWorkbook.Worksheets(i)
letzteZ = .Cells(Rows.Count, 1).End(xlUp).Row
Zeile = Worksheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("A5:W" & letzteZ).Copy Worksheets("Zusammenfassung").Range("A" & Zeile)
End With
Next
End Sub
Jetzt hat sich aber das Problem geändert.
Die Tabellen in den Datenblättern haben zwar noch die gleiche Struktur und Breite,
aber die Länge ist unterschiedlich.
D.h., ich muss in jedem Tabellenblatt erst mal die Länge der Datei ermitteln
und das dann in die Schleife einbauen.
Oder ich lass in jeder Tabelle mit usedrange den Bereich markieren....
Aber wie dem auch sei, ich kriegs nicht hin.
Könnt Ihr helfen?
Heinz

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Tabelleenblättern zusammenfassen
03.09.2016 12:24:07
Fennek
Hello,
die letzte Zelle einer Spalte kann man eermitteln mit

cells(rows.count, "A").end(xlup).row

mfg
AW: Daten aus Tabelleenblättern zusammenfassen
03.09.2016 13:00:02
Werner
Hallo Heinz,
mit dieser Codezeile ermittelst du doch die letzte Zeile in den jeweiligen Datenblättern:
letzteZ = .Cells(Rows.Count, 1).End(xlUp).Row
Allerdings stimmt die Referenzierung nicht. Du hast die Codezeile in einem With - End With stehen. Für eine korrekte Referenzierung muss vor das Rows noch ein Punkt.
letzteZ = .Cells(.Rows.Count, 1).End(xlUp).Row
Gruß Werner
Anzeige
AW: Daten aus Tabelleenblättern zusammenfassen
03.09.2016 13:35:00
Heinz
Servus Werner,
also ich hab es jetzt hinbekommen.
Wegen Deiner Referenzierung:
Das hat auch ohne den Punkt funktioniert.
Aber wie dem auch sei, Ich habe den Punkt eingebaut.
Vielen Dank für Deine Hilfe.
Heinz
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
03.09.2016 13:43:54
Werner
AW: Daten aus Tabelleenblättern zusammenfassen
03.09.2016 13:51:49
Luschi
Hallo Heinz,
wenn es in den einzelnen Tabellen Formeln gibt, die sich auf die selbige Tabelle beziehen, dann werden diese Formeln auf das Tabellenblatt 'Zusammenfassung' mitkopiert, ohne daß der Tabellenbezug angepaßt wird.
Also alle Formeln beziehen sich dann auf das Tabellenblatt 'Zusammenfassung' - und das ewrgibt _ dann natürlich Nonsens. Deshalb kopiere ich in das Zusammenfassungs-Tabellenblatt grundsätzlich nur die Werte und kleine Formeln. In Deinem Fall geht das so:

Sub zusammenfassen()
'by Luschi 2016-09-03
Dim ws_Ziel As Worksheet
Dim Zeile As Long
Dim letzteZ As Long
Dim AnzahlBlaetter As Integer
Dim i As Integer
'Excel-Bremsen deaktivieren
Call getMoreSpeed(True)
'Auswertungsblatt an 1. Pisition einfügen
ThisWorkbook.Sheets.Add Before:=Worksheets(1), Type:=xlWorksheet
Set ws_Ziel = ActiveSheet
ws_Ziel.Name = "Zusammenfassung"
'Überschrift
With ws_Ziel.Range("A1")
.Value = "Gesamt"
.Font.Bold = True
.Font.Size = 14
End With
'Die ersten 4 Kopzeilen kopieren
ThisWorkbook.Worksheets(2).Range("A2:W4").Copy ws_Ziel.Range("A2")
'Anzahl der Arbeitsblätter ermitteln
AnzahlBlaetter = ThisWorkbook.Worksheets.Count
'Von Blatt 2 bis Blatt zum letzten Blatt zusammenfassen
For i = 2 To AnzahlBlaetter
With ThisWorkbook.Worksheets(i)
letzteZ = .Cells(.Rows.Count, 1).End(xlUp).Row
Zeile = ws_Ziel.Cells(Rows.Count, 1).End(xlUp).Row + 1
'Bereich kopieren
.Range("A5:W" & letzteZ).Copy
'nur die Werte & keine Formeln übertragen
ws_Ziel.Range("A" & Zeile).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Zwischenspeicher leeren
Application.CutCopyMode = False
End With
Next
Application.Goto ws_Ziel.Range("A1"), True
Set ws_Ziel = Nothing
Call getMoreSpeed(False)
MsgBox "habe  F e r t i g...", vbSystemModal + 48, "zur Information!"
End Sub
Sub getMoreSpeed(bDoIt As Boolean)
'Bildschirmaktualisierung
Application.ScreenUpdating = Not (bDoIt)
'Excel-Ereignisse
Application.EnableEvents = Not (bDoIt)
'Berechnungsstatus
Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
'Bildschirm-Cursor-Anzeige
Application.Cursor = IIf(bDoIt, 2, -4143)
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
Danke an alle
03.09.2016 17:48:09
Heinz
Hallo Luschi,
guter Hinweis, der zwar im Augenblick kein Problem wäre,
aber wenn das Problem schon gelöst ist bevor es auftritt,
dann bin ich immer einen Schritt voraus ;-)
Heinz

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige