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

Tabelle splitten und wieder als Tabelle

Tabelle splitten und wieder als Tabelle
15.12.2021 16:15:23
Anna
Hallo zusammen,
ich bin bereits bei einem Makro fündig geworden, was eine Tabelle splittet. Jetzt wäre mein Wunsch, dass es in den neuen Tabellenblättern die Tabellen auch wirklich wieder als Tabelle formatiert, so wie die Orginaltabelle. Ist das möglich?

Sub Splitdatabycol()
'by Extendoffice
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol)  "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle splitten und wieder als Tabelle
16.12.2021 02:10:05
Oberschlumpf
Hi Anna
wie sieht denn das Format im Original aus?
Zeig bitte mal per Upload eine Bsp-Datei mit Bsp-Daten im Originalformat und den Bsp-Daten nach Splitten.
Ciao
Thorsten
AW: Tabelle splitten und wieder als Tabelle
16.12.2021 09:48:17
Anna
Hallo Thorsten,
https://www.herber.de/bbs/user/149839.xlsm
anbei die Datei mit der Originaltabelle und auch das Makro wie es die Tabelle aktuell spaltet und einen Reiter Wunschformatierung (wie ich es mir vorstellen würde)
Die Nummern sind immer verschiedenen und auch deutlich mehr, dass heißt ich kann schwer jede Tabelle einzeln ansprechen.
Viele Grüße
Anna
Anzeige
AW: Tabelle splitten und wieder als Tabelle
17.12.2021 05:48:15
Udo.D
Hallo Anna,
tausche mal deinen gesamten Code gegen diesen ( komplett beide ) und starte dann
das " Splitt_und_Format " Makro ...
ansonsten musst du mehr Infos bei die Fische geben, wie du es dann gerne hättest.
Format is jedenfalls damit übertragen
LG Udo
' ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Sub Splitt_und_Format()
'           zunächst vorherige Aufstellung ( bereits erstellte TAB Seiten ) löschen
Dim wks As Worksheet
Application.DisplayAlerts = False
For Each wks In ThisWorkbook.Sheets
If wks.Name  "ROH" Then wks.Delete
Next
Application.DisplayAlerts = True
' Hier nun dein Splittingmakro ablaufen lassen
Application.Run "Splitdatabycol"
Sheets(1).ListObjects("Tabelle1").Range.AutoFilter
Sheets(1).ListObjects("Tabelle1").Range.AutoFilter
' deine Ausgangstabelle, bzw. deren Format kopieren
Sheets(1).Cells.Copy
' nun das kopierte Format in deine gewünschten Tabelleblätter nach und nach übertragen
' Merke ! Format betrifft hier nur alle grundsätzlichen Einstellungen die du direkt
' in den Zellen verankert hast ( Linienfarben, Füllungen, bed. Formatierung usw.
' nicht aber das explizite " Tabellen Format ! in dem jew. TAB "
For Each wks In ThisWorkbook.Sheets
If wks.Name  "ROH" Then
wks.Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Cells(2, 1).Select
End If
Next
Application.CutCopyMode = True     ' Kopieren abbrechen
Sheets("ROH").Select               ' Wechsel in deine Ausgangstabelle ( Tab 1 )
End Sub

' ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Sub Splitdatabycol()
'           by Extendoffice
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Bitte Überschrift:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol)  "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter Field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move After:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns '.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

Anzeige
... noch erweiternd
17.12.2021 06:10:37
Udo.D
... um nun deinem evtl. Wunsch nach Identität aller TAB wie deine AusgangsTAB gerechter zu werden
kannst du das erste Makro noch austauschen gegen das hier unten beigefügte.
Dazu müsstest du aber auf diener AusgangsTAB die eingesetzte Tabelle in einem Bereich zurück konvertieren
( geht leicht über Rechtsklick in diesen TAB Bereich , dann runter zu Tabelle und ...Bereich konv. ) dann wandelt
Er / Sie / Es wieder in einen normalen Bereich der so der letzten Ansicht ( Farbe usw. ) der vorherigen Tab.Ansicht erhalten bleibt.
Den Filter kannst du ja separat setzen ( Bereich auswählen und aufs Filter Icon klicken, erste Zeile fixieren usw.)
Damit hättest du schon mal im Prinzip das gleiche Ergebnis wie zuvor ...
Wenn du nun das unten angehängte durchlaufen lässt, werden auch die Farben mit übernommen in deine ganzen Tabs...
Sollte das immernoch nicht reichen, weil keine Filter a TAB und du lieber diese Tabellen-Funktion (ListObjects) in jeder TAB
gerne so hättest wie in deiner Ausgangstab, dann muss man tatsächlich explizit eine Schleife laufen lassen im Abgang die das
dann alles macht, da müsste Dir dann noch ein anderer Jemand helfen, daher setze ich das Häckchen mal nochmals auf offen
LG udo
' ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Sub Splitt_und_Format()
'           zunächst vorherige Aufstellung ( bereits erstellte TAB Seiten ) löschen
Dim wks As Worksheet
Application.DisplayAlerts = False
For Each wks In ThisWorkbook.Sheets
If wks.Name  "ROH" Then wks.Delete
Next
Application.DisplayAlerts = True
' Hier nun dein Splittingmakro ablaufen lassen
Application.Run "Splitdatabycol"
Sheets(1).Range("A1:B1000").AutoFilter
Sheets(1).Range("A1:B1000").AutoFilter
' Sheets(1).ListObjects("Tabelle1").Range.AutoFilter
' Sheets(1).ListObjects("Tabelle1").Range.AutoFilter
' deine Ausgangstabelle, bzw. deren Format kopieren
Sheets(1).Cells.Copy
' nun das kopierte Format in deine gewünschten Tabelleblätter nach und nach übertragen
' Merke ! Format betrifft hier nur alle grundsätzlichen Einstellungen die du direkt
' in den Zellen verankert hast ( Linienfarben, Füllungen, bed. Formatierung usw.
' nicht aber das explizite " Tabellen Format ! in dem jew. TAB "
For Each wks In ThisWorkbook.Sheets
If wks.Name  "ROH" Then
wks.Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Cells(2, 1).Select
End If
Next
Application.CutCopyMode = True     ' Kopieren abbrechen
Sheets("ROH").Select               ' Wechsel in deine Ausgangstabelle ( Tab 1 )
End Sub

Anzeige
AW: ... noch erweiternd
17.12.2021 09:01:58
Anna
Hallo Udo,
vielen lieben Dank für deine Hilfe.
Das schaut wirklich schon gut aus. Mit den Schleifen ist es so eine Sache, die verschiedenen Namen sind ein paar mehr, weshalb das Wahnsinn wäre es einzeln in Schleifen zu packen. Aber das reine Tabellenformat wäre schon gut, aber vielleicht gibt es diesmal nicht die perfekte Lösung.
Vielen lieben Dank!
AW: ... noch erweiternd
17.12.2021 09:53:00
peterk
Hallo
Die folgende Procedure splittet Deine ROH Tabelle nach Namen (Column 1).

Sub Tabellen_erstellen()
Dim i As Long
Dim lastRow As Long
Dim sheetName As String
Dim ws As Worksheet
Application.ScreenUpdating = False
With Worksheets("ROH")   ' anpassen
.ListObjects("Tabelle1").AutoFilter.ShowAllData
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
'eindeutige Werte finden über Hilfspalte
.Range("A2:A" & lastRow).Copy .Range("Z1")
.Range("Z1:Z" & lastRow).RemoveDuplicates Columns:=1, Header:=xlNo
For i = 1 To .Cells(.Rows.Count, "Z").End(xlUp).Row
sheetName = .Cells(i, "Z")
.ListObjects("Tabelle1").Range.AutoFilter Field:=1, Criteria1:=sheetName
Worksheets.Add After:=Worksheets(Worksheets.Count)
.ListObjects("Tabelle1").Range.SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1")
ActiveSheet.ListObjects.Add(xlSrcRange, , , xlYes).Name = sheetName
For Each ws In ThisWorkbook.Worksheets
If ws.Name = sheetName Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next ws
ActiveSheet.Name = sheetName
Next i
.ListObjects("Tabelle1").AutoFilter.ShowAllData
.Columns("Z").ClearContents
End With
Application.ScreenUpdating = True
End Sub
Peter
Anzeige
AW: Tabelle splitten und wieder als Tabelle
17.12.2021 10:27:44
Oberschlumpf
Hi Anna,
hier mein Versuch:
https://www.herber.de/bbs/user/149874.xlsm
zuerst werden die Werte in Spalte B so in eine Arrayvariable eingelesen, dass jeder Wert nur noch 1x enthalten ist
dann wird die Arrayvariable mittel For/Next so abgearbeitet, dass...
...für jeden Eintrag aus Arrayvariable ein eigenes Tabellenblatt erstellt wird
...mit Hilfe von Eintrag aus Arrayvariable werden aus der ROH-Tabelle die Zeilen mit dem selben Eintrag in Spalte B in die jeweils neue Tabelle eingefügt
...jede Tabelle in jedem neuen Tabellenblatt erhält das gewünschte Format
Hilfts?
Ciao
Thorsten
Schau dir das fehlerlose Funktionieren erst mal in der Bsp-Datei an, bevor du den Code am Original (einer Kopie desselben?) ausprobierst
Anzeige
chapeau Thorsten, sauber, das sitzt !!
17.12.2021 15:26:11
Udo.D
Sauber gemacht,
das ist einfach der höhere Level, echt prima
Danke dir auch für die Nachilfe ;-)
LG udo
danke Udo, für dich ein schönes WE :-) owT
17.12.2021 19:50:57
Oberschlumpf
AW: Tabelle splitten und wieder als Tabelle
16.12.2021 06:04:04
Udo.D
Hallo Anna,
kannst das mal testen, evtl. hilft dir das schon ...
Die Feinheiten musst du dir halt noch anpassen ...

Sub Format_übertragen()
Application.ScreenUpdating = False
Sheets(1).Copy After:=Sheets(1) ' Duplikat von TAB 1 erstellen bzgl. Format
' Hier dann deine Splittingdingens oder ...
' Duplikat mit best. Format nun alle Zellen wählen / kopieren
Sheets(2).Cells.Copy
' nun das kopierte Format in deine gewünschten Tabelleblätter nach und nach übertragen
' die Zeit hier eine Schleife aufzubauen musst du bitte selber investieren ...
' quasi analog dann schon mal so / Namen der TABs halt noch anpassen wie bei dir ...
Sheets("Tabelle15").Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Tabelle15").Select
Range("A1").Select
Sheets("Tabelle16").Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Tabelle16").Select
Range("A1").Select
Sheets("Tabelle17").Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Tabelle17").Select
Range("A1").Select
Application.CutCopyMode = True     ' Kopieren abbrechen
Application.DisplayAlerts = False  ' Warnfenster kurzfristig deaktivieren ( Bzgl. Blatt löschen )
Sheets(2).Delete                   ' Duplikat / 2. TAB nun wieder löschen
Application.DisplayAlerts = True   ' Warnfenster wiedder aktivieren
Sheets("Tabelle1").Select          ' Wechsel in deine Ausgangstabelle ( Tab 1 )
End Sub
LG Udo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige