Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1584to1588
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

Gewisse Tabellenblätter zusammenführen

Gewisse Tabellenblätter zusammenführen
24.10.2017 13:20:25
Christian
Hallo liebe Freunde,
leider scheine ich heute, für die Suchfunktion und Google ein wenig zu "blöd" zu sein. Denn das was ich suche finde ich einfach nicht und kann mir nicht vorstellen, dass es dieses Problem noch nicht gab bzw. es noch keine Lösung gibt.
Folgendes möchte ich "machen".
Ich möchte gewisse Tabellenblätter in ein gewisses Tabellenblatt kopieren.
Beispiel: Mai 2017, April 2017, Januar 2016, etc. die Werte ohne die Überschriften sollen in das Blatt "Rohdaten" kopiert werden.
Makros um "alle" Blätter in eins kopieren habe ich gefunden aber ich möchte im Makro gerne eine "Liste" haben mit den Tabellenblättern welche kopiert werden sollen.
Könnt ihr mir dabei helfen?
Gerne kann das Makro auch die Daten löschen und jedes mal alles neu kopieren, so machen es die Makro die ich bis jetzt gefunden habe und alle Blätter kopieren.

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gewisse Tabellenblätter zusammenführen
24.10.2017 13:48:31
Michael
Hallo!
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Application.ScreenUpdating = False
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub
LG
Michael
Anzeige
AW: Gewisse Tabellenblätter zusammenführen
24.10.2017 13:51:13
Christian
Super, vielen Dank, genau das habe ich gesucht!
Immer gern, Danke für die Rückmeldung, owT
24.10.2017 13:57:45
Michael
Jetzt noch doppelte löschen
24.10.2017 14:50:03
Christian
Okay, also im Prinzip klappt es schon echt super.
Problem sind jetzt noch die doppelten wenn man das Makro mehrfach ausführt. Hättest Du dafür noch eine Idee, die Makros die ich gefunden habe löschen immer mehr als sie sollen.
Top Aufgaben-Beschreibung
24.10.2017 15:11:58
Michael
Chris,
Hättest Du dafür noch eine Idee, die Makros die ich gefunden habe löschen immer mehr als sie sollen.
Wie soll man Dir da konkret helfen? Grobe Hilfe: Du kannst ja manuell Deine gesammelten Daten mit "Duplikate entfernen" (im Menüband unter Daten zu finden) bearbeiten und das ganze als Makro aufzeichnen.
LG
Michael
Anzeige
AW: Top Aufgaben-Beschreibung
24.10.2017 15:38:03
Christian
Hey Michael,
das mit den doppelten über dem Menüband ist ja bekannt, nur muss ich bei dem Marko von Dir:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Application.ScreenUpdating = False
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub
das jedes mal nach dem Ausführen machen. Gibt es eine Möglichkeit, in dem gleichen Makro die doppelten Werte in der Ziel-Tabelle zu löschen damit die Werte nicht mehrfach vorkommen?
Ich habe das Makro versucht um folgenden Wert zu ergänzen:
Worksheets ("Rohdaten").ListObjects(1).Ranfe.RemoveDuplicates _
Header:=x1Yes
Leider klappt es damit nicht.
Kannst Du mir hier ggf. weiterhelfen? Danke und liebe Grüße
Anzeige
So...
24.10.2017 16:14:10
Michael
Hallo Chris,
Verwendest Du im Blatt "Rohdaten" wirkliche eine formatierte Tabelle? Dein Code deutet darauf nämlich hin. In dem Fall dann so:

Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Application.ScreenUpdating = False
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
WsZ.ListObjects(1).Range.RemoveDuplicates Columns:=1, Header:=xlYes
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub
Das Kriterium um Duplikate zu entfernen übernehme ich in diesem Fall aus Spalte 1 der formatierten Tabelle.
LG
Michael
Anzeige
Danke, aber leider gibt es einen Fehler
25.10.2017 09:33:27
Christian
Guten Morgen,
erst einmal vielen für Deine Hilfe.
Nein, ich verwende keine formatierte Tabelle im Blatt "Rohdaten", was auch immer das ist?! ;-)
Bei dem Makro von Dir erhalte ich einen Laufzeitfehler in folgender Zeile:
WsZ.ListObjects(1).Range.RemoveDuplicates Columns:=1, Header:=xlYes
Würdest Du mir hier ggf. noch weiter helfen? Damit dieser verschwindet.
Offenbar nicht, aber das hab ich von Dir...
25.10.2017 09:55:01
Dir...
Chris,
...übernommen:
Ich habe das Makro versucht um folgenden Wert zu ergänzen:

Worksheets ("Rohdaten").ListObjects(1).Ranfe.RemoveDuplicates _
Header:=x1Yes
Ich kann nur mit dem Arbeiten, was ich von Dir sehe - und beim o.a. Codeteil beziehst Du Dich auf eine formatierte Tabelle (für mehr Infos dazu siehe Google).
Wenn Du also keine formatierte Tabelle in Rohdaten nutzt, dann so:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Application.ScreenUpdating = False
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
WsZ.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub
Wenn das noch nicht klappt, musst Du mir eine Bsp-Datei zeigen.
LG
Michael
Anzeige
Stimmt, mein Fehler
25.10.2017 12:23:02
Christian
Hallo,
vielen Dank für Deine Mühe! Ich hoffe ich kann mich dafür mal revanchieren.
Anbei die Datei: https://www.herber.de/bbs/user/117202.xlsm
Ich möchte das alle Daten von gewissen Blättern in die Rohdaten kopiert werden, welches das erste Makro von Dir ja schon super macht. Leider werden die Daten auch mehrfach übertragen wenn ich das Makro mehrfach ausführe. Nun möchte ich aber das die Daten nur 1x in den Rohdaten sind und nicht doppelt. Sprich die doppelten gelöscht werden oder er das Blatt leert und dann neu "füllt".
Vielen Dank, erneut!
Anzeige
Schau mal...
25.10.2017 12:35:23
Michael
Chris,
...ob Du so hinkommst:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Application.ScreenUpdating = False
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
WsZ.UsedRange.RemoveDuplicates
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub
LG
Michael
Anzeige
leider wieder ein "Fehler"
25.10.2017 13:04:47
Christian
Leider kommt wieder ein Laufzeitfehler:
With Wb.Worksheets(Blattliste(i))
hier hört er auf mit der Meldung Index außerhalb des Berreichs
Na, das ist schon möglich...
25.10.2017 13:11:09
Michael
Chris,
...weil Mitdenken prinzipiell erlaubt ist. Hast Du das Array "Blattliste" auch angepasst?
Ursprünglich wurde das Array ja so gefüllt:
Blattliste = Array("Mai 2017", "April 2017", "Januar 2016")
Wenn Du in Deiner zuletzt hochgeladenen Bsp-Datei getestet hast, müsstest Du aber anpassen; da hast Du kein Blatt "Januar 2016" zB. Alle Blätter, die Du im Array angibst, müssen auch in der Mappe existieren, sonst wirft das einen (erwarteten) Fehler, den ich aktuell nicht abfange - ich bin nicht davon ausgegangen, dass dies erforderlich ist.
LG
Michael
Anzeige
zum Teil das 30cm Problem
25.10.2017 14:29:20
Christian
Die Blattliste habe ich angepasst und warum auch immer kommt nach einem Neustart von Excel der Fehler nicht mehr, ich denke hier kommt das 30cm Problem zum tragen.
Aber das Problem bleibt bestehen, dass sich die Daten im Blatt "Rohdaten" einfach nur vermehren. Klicke ich das Makro 100x habe ich alle Daten 100x in den Rohdaten und das Ziel war/ist ja, dass dort keine doppelten auftauchen.
Grundsatzfrage(n)
25.10.2017 16:31:39
Michael
Klicke ich das Makro 100x habe ich alle Daten 100x in den Rohdaten
Wenn sich die Daten nicht ändern, warum holst Du sie dann erneut in das Sammel-Blatt? Wie ist diese Vorgangsweise zu verstehen? Ich beginne zu glauben, dass es ggf. doch Sinn machen könnte, zunächst alle Zellen in "Rohdaten" zu löschen bevor Daten aus den anderen Blättern importiert werden...
Ziel war/ist ja, dass dort keine doppelten auftauchen
Woran ist festzumachen, ob ein Datensatz ein Duplikat ist? Welcher (Spalten-) Wert ist dafür ausschlaggebend?
hier kommt das 30cm Problem zum tragen
Und das bedeutet...?
LG
Michael
Anzeige
Aber Michael; auch als 40cm-Problem bekannt! ;-]
25.10.2017 19:20:30
Luc:-?
Gruß, Luc :-?
Aaaahhhhh! ;-)
27.10.2017 11:21:40
Michael
Antworten und Erklärung
26.10.2017 10:42:38
Christian
Hallo Michael,
erst Mal vielen Dank für Deine Hilfe.
Klicke ich das Makro 100x habe ich alle Daten 100x in den Rohdaten
Wenn sich die Daten nicht ändern, warum holst Du sie dann erneut in das Sammel-Blatt? Wie ist diese Vorgangsweise zu verstehen? Ich beginne zu glauben, dass es ggf. doch Sinn machen könnte, zunächst alle Zellen in "Rohdaten" zu löschen bevor Daten aus den anderen Blättern importiert werden...
Die Daten werden jeden Tag gepflegt und werden sollen dann gesammelt in die "Rohdaten" übertragen werden. Vielleicht wäre es in der Tat einfacher wenn man das Blatt "Rohdaten" mit Ausnahme von Zeile 1 löscht/leert.
Ziel war/ist ja, dass dort keine doppelten auftauchen
Woran ist festzumachen, ob ein Datensatz ein Duplikat ist? Welcher (Spalten-) Wert ist dafür ausschlaggebend?

Anhand der Zeilen, jede Zeile muss einzigartig sein sprich jede Zeile darf mit allen Werten nur 1x vorkommen.
hier kommt das 30cm Problem zum tragen
Und das bedeutet...?

Das Problem sitzt 30 cm vom Bildschirm entfernt. Also meine Unfähigkeit die "Anforderung" richtig zu beschreiben damit es für andere Einfacher ist mir zu helfen.
LG
Christian
AW: Antworten und Erklärung
26.10.2017 15:29:29
fcs
Hallo Christian,
hier dein Makro mit Anpassungen:
- Altdaten in "Rohdaten werden glöscht
- Blätter aus denen kopiert werden soll werden anders festgelegt über Select Case
...(Ausnahmen werden festgelegt)
- Doppelte Zeilen werden gelöscht
Gruß
Franz
Sub RohDaten_Aktualisieren()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim wks As Worksheet
Dim lastRow As Long
Application.ScreenUpdating = False
'Altdaten in Zieltabelle (Rohdaten) löschen
With WsZ
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
If lastRow > 1 Then
.Range(.Rows(2), .Rows(lastRow)).Delete
End If
End With
For Each wks In Wb.Worksheets
With wks
Select Case .Name
Case "Rohdaten", "Tabelle XYZ" 'ggf. weiter Tabellennamen ergänzen
'nichts machen
Case Else
'            Case "Februar 2017", "März 2017", "April 2017", "Mai 2017" 'wenn unbedingt nur aus  _
_
diesen Blätter kopiert werden soll
'bei allen anderen Blättern Daten ab Zeile 2 kopieren nach Zieltabelle
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End Select
End With
Next wks
'Doppelte Zeilen löschen
WsZ.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Header:=xlYes
Application.CutCopyMode = False
Application.ScreenUpdating = True
Set Wb = Nothing: Set WsZ = Nothing: Set wks = Nothing
End Sub

AW: Antworten und Erklärung
27.10.2017 09:05:07
Christian
Hallo,
erst mal vielen Dank für Deine Mühe. Leider macht es genau das falsche ;-) ich brauche explizit nur gewisse Blätter.
Aber ich habe Dein Makro uns das Makro von Michael mal zusammen geführt und nun macht es was ich möchte.
Es werden erst alle Daten gelöscht und dann alle Blätter die in der Liste sind eingeführt.
Danke Euch
ub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Rohdaten")
Dim Blattliste, i&
Blattliste = Array("Mai 2017", "April 2017", "Juni 2017")
Application.ScreenUpdating = False
'Altdaten in Zieltabelle (Rohdaten) löschen
With WsZ
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
If lastRow > 1 Then
.Range(.Rows(2), .Rows(lastRow)).Delete
End If
End With
For i = LBound(Blattliste) To UBound(Blattliste)
With Wb.Worksheets(Blattliste(i))
With .UsedRange
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy
End With
WsZ.Cells(WsZ.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial _
xlPasteValuesAndNumberFormats
End With
Next i
Set Wb = Nothing: Set WsZ = Nothing: Erase Blattliste
End Sub

Super, aber dann ist der Faden wohl zu! owT
27.10.2017 11:21:04
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige