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

VBA Aufteilen einer Excel-Liste auf mehrer Dateien

VBA Aufteilen einer Excel-Liste auf mehrer Dateien
07.06.2018 14:08:13
Claas
Hallo,
ich habe ein funktionierendes Makro um Anhand eines Kriteriums in Spalte A einer Datei mit 5 Spalten diese in mehrere neue Dateien aufteilt.
Es funktioniert auch soweit, allerdings ist es etwas sperrig, hat jemand eine Idee wie man folgende Punkte verbessern kann:
- Wie kann man statt Standardmäßig 5 Spalten bzw. manueller Anpassung mittels weiterer Zeilen in der If-Schleife eine automatische Ermittlung der belegten Spalten im Blatt 'Quelle' umsetzen?
- Kann man auch Formeln oder sogar Formate mitkopieren statt nur der reinen Daten wie derzeit?
- Derzeit muss man immer das Arbeitsblatt Pivot mit dem Makro in die Datei kopieren, den Bezug der Pivottabelle ändern, sie so sortieren dass nichts leeres ob steht. Hat jemand eine Idee wie man die Auswahl des Strings 'Kriterium' nach dem die Liste aufgeteilt und die neuen Dateien benannt werden aus Spalte A idealerweise ohne Hilfspivot einfacher machen kann bzw. ob man zumindest die Erstellung Tabellenblatts mit der Pivottabelle und dessen anschließende Löschung aus der Datei umsetzen kann?
Vielen Dank vorab!
Sub Pivotrefresh()
Worksheets("Pivot").Activate
ActiveSheet.PivotTables("PivotTable8").PivotCache.Refresh
End Sub
Sub Start()
Dim I As Byte, K As Integer, X As Integer, Y As Integer
Dim Kriterium As String, Pfad As String
Dim AW As String
'Dies bitte anpassen => Pfad, wo gespeichert werden soll
Pfad = "C:\Users\C12390\Desktop\VBA Probe\liste teilen"
'Bildschirmaktualisierung abschalten
Application.ScreenUpdating = False
'Datenbasis neu aufstellen
Pivotrefresh
'Zum richtigen Tabellenblatt springen
Worksheets("Quelle").Activate
'Ende der Quelle finden
Worksheets("Quelle").Cells(Rows.Count, 2).End(xlUp).Activate
K = Replace(ActiveCell.Address(False, False), "B", "")
'Beginn in Zeile => Pivottabelle
I = 5
'Loslaufen
Do
'Ersten Eintrag der zu filternden Kriterien
Kriterium = Worksheets("Pivot").Cells(I, 1)
'Für jedes Kriterium ein Tabellenblatt
Worksheets.Add
ActiveSheet.Name = Kriterium
'Zunächst die Überschriften setzen
Worksheets(Kriterium).Cells(1, 1) = Worksheets("Quelle").Cells(1, 1)
Worksheets(Kriterium).Cells(1, 2) = Worksheets("Quelle").Cells(1, 2)
Worksheets(Kriterium).Cells(1, 3) = Worksheets("Quelle").Cells(1, 3)
Worksheets(Kriterium).Cells(1, 4) = Worksheets("Quelle").Cells(1, 4)
Worksheets(Kriterium).Cells(1, 5) = Worksheets("Quelle").Cells(1, 5)
'Zeile in jedem Tabellenblatt wieder auf zwei setzen
Y = 2
'Die Quelle vom Anfang bis Ende durchlaufen
For X = 1 To K
'Sofern Kriterium entspricht, kopieren
If Worksheets("Quelle").Cells(X, 1) = Kriterium Then
Worksheets(Kriterium).Cells(Y, 1) = Worksheets("Quelle").Cells(X, 1)
Worksheets(Kriterium).Cells(Y, 2) = Worksheets("Quelle").Cells(X, 2)
Worksheets(Kriterium).Cells(Y, 3) = Worksheets("Quelle").Cells(X, 3)
Worksheets(Kriterium).Cells(Y, 4) = Worksheets("Quelle").Cells(X, 4)
Worksheets(Kriterium).Cells(Y, 5) = Worksheets("Quelle").Cells(X, 5)
Y = Y + 1
End If
Next X
'Neue Mappe aufmachen und Tabellenblatt verschieben
Sheets(Kriterium).Move
ActiveWorkbook.SaveAs Filename:=Pfad & "\" & Kriterium & ".xls", FileFormat:= _
xlNormal, CreateBackup:=False
'Aktives Tabellenblatt schließen. Änderungen wurden bereits gespeichert!
ActiveWorkbook.Close
'Nächste Runde
I = I + 1
Loop Until Worksheets("Pivot").Cells(I, 1) = "(Leer)"
AW = MsgBox("Der Vorgang wurde abgeschlossen!", vbOKOnly + vbInformation + vbSystemModal, " _
Hinweis")
Application.ScreenUpdating = True
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Aufteilen einer Excel-Liste auf mehrer Dateien
07.06.2018 14:47:18
Daniel
Hi
probier mal diesen Code.
Daten müssen ab Zeile 2 im tabellenblatt stehen, Zeile 1 ist Überschrift.
Die Quelltabelle wird nach der Kriteriumsspalte sortiert, damit lassen sich die Daten in einem Schritt als Block kopieren, was die Sache sehr schnell macht.
Beachte, dass seit Excel 2007 das Speicherformat xlNormal nicht mehr existiert und du konkret angeben solltest, ob du eine xlsx, xlsm, xlsb oder xls -Datei haben willst.
Die Dateierweiterung sollte man im Dateinamen nicht mehr angeben, diese wird automatisch und passend zum gewählten Dateiformat vergeben.
Sub Aufteilen()
Dim Zelle1 As Range, Zelle2 As Range
Dim wb As Workbook
Dim Pfad As String
Pfad = "C:\Users\C12390\Desktop\VBA Probe\liste teilen"
With ActiveSheet
'--- Quelltabelle sortieren
.UsedRange.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
'--- neue leere Datei anlegen, Überschriften und Spaltenbreiten übernehmen
Set wb = Workbooks.Add(xlWBATWorksheet)
.UsedRange.Copy
wb.Sheets(1).PasteSpecial xlPasteColumnWidths
.Rows(1).Copy Destination:=wb.Sheets(1).Cells(1, 1)
'--- Daten übernehmen
Set Zelle1 = .Cells(2, 1)
Do Until Zelle1.Value = ""
'--- Kriterium letzte Zeilen finden
Set Zelle2 = .Columns(1).Find(what:=Zelle1.Value, _
lookat:=xlWhole, LookIn:=xlValues, _
searchdirection:=xlPrevious)
'--- Zieltabelle leeren
wb.Sheets(1).UsedRange.Offset(1, 0).Clear
'--- Daten kopieren
Range(Zelle1, Zelle2).EntireRow.Copy Destination:=wb.Sheets(1).Cells(2, 1)
'--- Speichern
wb.SaveAs Pfad & "\" & Zelle1.Value, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
'--- nächstes Kriterium erste Zeile finden
Set Zelle1 = Zelle2.Offset(1, 0)
Loop
wb.Close
End With
End Sub
Gruß Daniel
Anzeige
AW: VBA Aufteilen einer Excel-Liste auf mehrer Dateien
13.06.2018 11:19:43
Claas
Hallo Daniel,
Danke, hilft beim Vorsortieren und macht es einfacher.
Leider löst es meine zwei Hauptprobleme nicht:
1. Muss ich auch die Formeln und idealerweise die Formate bei der Aufteilung der Liste mit übernehmen
2. Habe ich Listen mit unterschiedlicher Spaltenzahl die ich zerlegen muss und bei denen ich derzeit immer manuell das Makro auf die Zahl der Spalten anpassen muss. Ich suche nach einer Lösung die automatisch die Zahl der mit Überschriften berücksichtigt beim Kopieren.
Vielleicht hat jemand noch eine Idee wie man das Makro flexibel in Sachen Spaltenbreite machen kann und wie man nicht nur Werte sondern Formeln & Formate mitnimmt?
VG
Claas
Anzeige

46 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige