Anzeige
Archiv - Navigation
904to908
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
904to908
904to908
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten über Tabellen sammeln

Daten über Tabellen sammeln
11.09.2007 16:09:00
herbi
Hi,
folgendes Makro kopiert mir alle Daten von allen Tabellenblättern einer Datei und überträgt diese in ein Blatt WORK. Das Makro funktioniert soweit einwandfrei.
Nun möchte ich beim Übertragen, die Daten um eine Spalte verschieben. Also Spalte-1 von Quell-Blatt-1 soll nach Work Spalte-2 übertragen werden, usw...
Zusätzlich soll in WORK in jeder übertragenen Zeile in Spalte 1 der Name des Quell-Tabellenblattes stehen.
Mein Ziel ist es über die Daten aller Tabellenblätter auf einer Seite zu sammeln, damit ich eine Pivot erstellen kann. Ich möchte den Tabellenblattnamen als zusätzliches Auswahlkriterium in der Pivot haben.
Hoffe, es kann mir jemand helfen - danke - Herbi

Sub copytabelle()
' copytabelle Makro
' Makro am 11.09.2007 von htjenu aufgezeichnet
Dim wksSheets As Worksheet
Dim strTarget As String
Dim lngI As Long, lngTargetLastRow As Long
' *** Hier den Namen des Blattes angeben in das kopiert werden soll !!!!
strTarget = "Work"
If MsgBox("Wollen Sie die Daten im Tabellenblatt " & strTarget & " vorher löschen ?!", vbYesNo)  _
_
_
_
_
= vbYes Then
Sheets(strTarget).Cells.Delete
End If
Application.ScreenUpdating = False
For Each wksSheets In ActiveWorkbook.Worksheets
If wksSheets.Name  strTarget Then
For lngI = 1 To wksSheets.Cells(Rows.Count, 1).End(xlUp).Row
' If UCase(wksSheets.Cells(lngI, 1)) = UCase("realisation") Then
wksSheets.Cells(lngI, 1).EntireRow.Copy
lngTargetLastRow = Sheets(strTarget).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(strTarget).Cells(lngTargetLastRow + 1, 1).Activate
ActiveSheet.Paste
' End If
Next lngI
End If
Next wksSheets
Application.ScreenUpdating = False
End Sub


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten über Tabellen sammeln
12.09.2007 00:17:21
fcs
Hallo Herbi,
passe dir For-Next-Schleife wie folgt an, um die Inhalte immer eine Spalte nach rachts zu verschiebein und dann den Blattnamen einzufügen.
Das ganze funktioniert nur korrekt, wenn in den kopierten Zeilen keine Formeln mit Bezügen zu anderen Zeilen sind.
Insgesamt isr das Makro nicht so besonders optimal, ab mir fehlt jetzt der Nervdie Frische den Code so anzupassen, dass jeweils alle Zeilen in einem Block aus den Tabellen in die Gesamtliste zu kopiert werden
Gruß
Franz

For Each wksSheets In ActiveWorkbook.Worksheets
If wksSheets.Name  strtarget Then
For lngI = 1 To wksSheets.Cells(Rows.Count, 1).End(xlUp).Row
' If UCase(wksSheets.Cells(lngI, 1)) = UCase("realisation") Then
wksSheets.Cells(lngI, 1).EntireRow.Copy
lngTargetLastRow = Sheets(strtarget).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(strtarget).Cells(lngTargetLastRow + 1, 1).Activate
ActiveSheet.Paste
Sheets(strtarget).Cells(lngTargetLastRow + 1, 1).Range("A1").Insert _
shift:=xlShiftToRight
Sheets(strtarget).Cells(lngTargetLastRow + 1, 1).Value = wksSheets.Name
' End If
Next lngI
End If
Next wksSheets


Anzeige
AW: Daten über Tabellen sammeln
13.09.2007 09:46:03
herbi
Hi Franz,
abgesehen davon, dass das Makro "ewig" läuft (ca. 5 Min für 15 Blätter) funzt es einwandfrei.
danke
herbi

AW: Daten über Tabellen sammeln
13.09.2007 13:20:18
fcs
Hallo Herbi,
hier eine Variante, die wesentlich schneller läuft. Falls nur die Zeilen mit Eintrag Realisation gewünsch sind sind. Dann werden zunächst alle Zeilen übertragen und am Schluss die unerwünschten Zeilen wieder gelöscht.
Gruß
Franz

Sub copytabelle()
' copytabelle Makro
' Makro am 11.09.2007 von htjenu aufgezeichnet
Dim wksSheets As Worksheet
Dim strTarget As String, wksTarget As Worksheet
Dim lngI As Long
Dim Bereich As Range, ZeileZiel As Long, ZeileStart As Long
' *** Hier den Namen des Blattes angeben in das kopiert werden soll !!!!
strTarget = "Work"
Set wksTarget = Worksheets(strTarget)
If MsgBox("Wollen Sie die Daten im Tabellenblatt " & strTarget & " vorher löschen ?!", _
vbYesNo) = vbYes Then
Sheets(strTarget).Cells.Delete
End If
Application.ScreenUpdating = False
ZeileZiel = wksTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1
ZeileStart = ZeileZiel
For Each wksSheets In ActiveWorkbook.Worksheets
If wksSheets.Name  strTarget Then
With wksSheets
lngI = wksSheets.Cells(Rows.Count, 1).End(xlUp).Row
Set Bereich = .Range(.Cells(1, 1), .Cells(lngI, _
.Cells.SpecialCells(xlCellTypeLastCell).Column))
Bereich.Copy Destination:=wksTarget.Cells(ZeileZiel, 2)
End With
With wksTarget
Set Bereich = .Range(.Cells(ZeileZiel, 1), .Cells(ZeileZiel + Bereich.Rows.Count - 1, 1) _
)
Bereich.Value = wksSheets.Name
End With
ZeileZiel = ZeileZiel + Bereich.Rows.Count
End If
Next wksSheets
GoTo weiter 'Diese Zeile deaktivieren, wenn nur Zeilen mit "Realisation" übertragen werden  _
sollen
With wksTarget
'Zeilen ohne "Realisation" in Spalte 2 löschen
For ZeileZiel = .Cells(.Rows.Count, 1).End(xlUp).Row To ZeileStart Step -1
If UCase(.Cells(ZeileZiel, 2))  UCase("realisation") Then
.Rows(ZeileZiel).Delete Shift:=xlShiftUp
End If
Next ZeileZiel
End With
weiter:
Application.ScreenUpdating = False
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige