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

Exceldatei aufteilen

Exceldatei aufteilen
Klaus
Hallo zusammen,
Ich habe folgendes Makro, das EINE Exceldatei in MEHRERE Dateien aufteilt, immer wenn sich der Wert in Spalte A ändert:
Bsp:
Lieferant Umsatz
Glashütte 3200
Glashütte 4599
Glashütte 6000
Frener 200
Frender 1000
Hauser 5000
Die Exceldatei wird in 3 Dateien gesplittet je Lieferant.
MEINE FRAGE: Wie muss das Makro aussehen, dass die erste Zeile (also meine Überschrift) in jede neue Datei mit übernommen wird?
Danke für eure Hilfe!!
Anbei das Makro
Sub splitten()
Dim wbMappe As Workbook, _
wbMappeAlt As Workbook, _
shBlatt As Worksheet, _
lngZeile As Long, _
strPfad As String
'Pfad festlegen (mit "\")
strPfad = "C:\Temp\"
'Erstmal alles in eine neue Mappe schaufeln
ActiveSheet.UsedRange.Cut
Set wbMappe = Workbooks.Add
wbMappe.Sheets(1).Paste
Application.CutCopyMode = False
Set shBlatt = ActiveSheet
Do
'falls vorhanden, die letzte Mappe speichern + schließen
If Not wbMappeAlt Is Nothing Then
wbMappeAlt.SaveAs Filename:=strPfad & _
CStr(wbMappeAlt.Sheets(1).Cells(1, 1).Value) & ".xls"
wbMappeAlt.Close
Set wbMappeAlt = Nothing
End If
'nächsten Bruch suchen
lngZeile = 1
Do
lngZeile = lngZeile + 1
'wenn Ende, dann Ende
If shBlatt.Cells(lngZeile, 1) = "" Then Exit Do
Loop Until shBlatt.Cells(lngZeile, 1) Cells(lngZeile - 1, 1)
'wenn Ende, dann Ende
If shBlatt.Cells(lngZeile, 1) = "" Then Exit Do
'Rest ausschneiden und in neue Mappe verschieben
Range(shBlatt.Cells(lngZeile, 1), shBlatt.Cells(shBlatt.UsedRange.Rows.Count, _
shBlatt.UsedRange.Columns.Count)).Cut
Set wbMappeAlt = ActiveWorkbook 'Alte Mappe markieren
Set wbMappe = Workbooks.Add
Set shBlatt = wbMappe.Sheets(1)
wbMappe.Sheets(1).Paste
Application.CutCopyMode = False
Loop
'Am Ende die Aktive Mappe speichern und schließen.
ActiveWorkbook.SaveAs Filename:=strPfad & _
CStr(ActiveWorkbook.Sheets(1).Cells(1, 1).Value) & ".xls"
ActiveWorkbook.Close

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

Betreff
Benutzer
Anzeige
Antwort im alten thread!
07.08.2009 12:45:44
Wolli
Gruß, Wolli
AW: Exceldatei aufteilen
07.08.2009 13:07:20
Daniel
Hi
dein Makro sieht aufwendig aus, schau dir mal das hier an:
Sub Datei_Splitten()
Dim Pfad As String
Dim WB As Workbook, wbQuelle As Workbook
Dim shQuelle As Worksheet
Dim strName As String
Pfad = "C:\DeinPfad\"
'erstmal Kopie anlegenen, damit Originaldaten nicht verändert werden
Set wbQuelle = Workbooks.Add
Set shQuelle = wbQuelle.Sheets(1)
ThisWorkbook.Sheets(1).UsedRange.Copy shQuelle.Cells(1, 1)
shQuelle.Cells(1, 1).CurrentRegion.Sort key1:=shQuelle.Cells(1, 1), _
order1:=xlAscending, header:=xlYes
'Daten splitten und speichern
Do Until shQuelle.Cells(2, 2).Value = ""
strName = shQuelle.Cells(2, 1)
With shQuelle.Cells(1, 1).CurrentRegion
'--- Filtern
.AutoFilter Field:=1, Criteria1:=strName
'-- neue Datei anlegen
Set WB = Workbooks.Add
'--- Daten kopieren
.SpecialCells(xlCellTypeVisible).Copy WB.Sheets(1).Cells(1, 1)
'--- neue Datei speichern und schließen
WB.SaveAs Pfad & strName & " " & Format(Date, "YYYY-MM-DD") & ".xls"
WB.Close
'--- Kopierte Daten aus liste löschen
'---durch das Offset bleibt die Überschrift stehen
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
Loop
wbQuelle.Saved = True
wbQuelle.Close
End Sub

die Liste muss im ersten Tabellenblatt der Datei stehen und ne richtige Liste sein, dh 1. Zeile ist Überschrift, alle weiteren Zeilen sind Daten. Es sind keine Leerzeilen oder Leerspalten innerhalb der Daten vor
der Trick bei der Sache ist, daß ich erst kopiere und nicht auschneide.
wenn ich dann die Kopierten Daten lösche, verschiebe ich den Bereich um eine Zeile, so daß die Überschrift erhalten bleibt.
Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige