Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel Tabelle aufteilen und einzeln sichern

Excel Tabelle aufteilen und einzeln sichern
12.11.2014 17:57:40
Paul-Werner
Hallo Excel-Gurus,
ich habe ein Problem mit einer Riesen-Datei, die ich sortieren und in einzelne kleine Dateien splitten und speichern muss.
Die Datei enthält ca. 300000 Einträge, die in ca. 50000 Einzeldateien zerlegt und gesichert werden soll.
Ich hänge einen Auszug dieser Datei unter https://www.herber.de/bbs/user/93721.xlsx an. In der Spalte A ist ein eindeutiger Indikator, zum Beispiel D000001. In der Zeile 1 ist eine Überschrift, welche in jede Datei kopiert werden soll.
Die Aufgabe besteht nun darin, alle Zeilen, die den gleichen Indikator in Spalte A haben, mit der Überschrift in Zeile 1 in eine neue Excel-Datei zu sortieren und mit dem Indikator als Dateiname an einen vorgegeben Ort der Festplatte zu speichern.
Ich hoffe, ich konnte mein Problemchen schlüssig erläutern und hoffe ebenfalls auf Eure Ideen.
Vielen Dank im Voraus
Paul

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Tabelle aufteilen und einzeln sichern
13.11.2014 07:16:30
Martin
Hallo Paul,
ich habe versucht deinen Wunsch umzusetzen. Du musst dich allerdings darauf einstellen, dass der Vorgang eine ganze Weile dauern wird. Im Augenblick werden die Dateien in dem Verzeichnis gespeichert, in dem sich deine "Riesen-Datei" befindet. Du musst einfach nur "ThisWorkbook.Path" durch ein Verzeichnis deiner Wahl ersetzen, falls die Dateien woanders gespeichert werden sollen.
Hoffentlich funktioniert das Makro entsprechend deiner Vorstellung:
Sub IndikatorenExportieren()
Dim dicIdentNo As Object
Dim strIdentNo As String
Dim arrIdentNo As Variant
Dim lngLastRow As Long, i As Long
Set dicIdentNo = CreateObject("Scripting.Dictionary")
'AutoFilter in Spalte A einrichten
Columns("A:A").AutoFilter
If Not ActiveSheet.AutoFilterMode Then
Columns("A:A").AutoFilter
End If
'Letzte Zeile ermitteln
lngLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Alle Indikator ermitteln
With dicIdentNo
For i = 2 To lngLastRow
strIdentNo = Trim(Cells(i, 1).Text)
If Not .Exists(strIdentNo) Then
.Add strIdentNo, 0
End If
Next i
'Alle Indikatoren in Array übertragen
arrIdentNo = .keys
'Jeden Indikator filtern und in neuer Arbeitsmappe speichern
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 0 To .Count - 1
Selection.AutoFilter Field:=1, Criteria1:=arrIdentNo(i)
Cells.SpecialCells(xlCellTypeVisible).Copy
Workbooks.Add
ActiveSheet.Paste
Selection.Columns.AutoFit
Range("A1").Select
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xlsx"
.Close
End With
Next
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
End With
End Sub
Viele Grüße
Martin

Anzeige
AW: Excel Tabelle aufteilen und einzeln sichern
13.11.2014 10:28:56
Paul-Werner
Hallo Martin,
herzlichen Dank für Deinen schnellen Lösungsvorschlag.
Ich habe das Makro ausgeführt und stoße auf einen Fehler 400? Die Datei wird getrennt, allerdings nicht gesichert. Ich nehme an, daß ich irgendeinen Fehler mache.
So, wie Du es beschreibst, könnte ich das durchaus einsetzen, würdest Du bitte nochmals die Datei anschauen und prüfen, welchen Fehler ich gemacht habe?
Ich habe die Datei mit Makro unter https://www.herber.de/bbs/user/93738.xlsm geladen.
Vielen Dank im Voraus, viele Grüße
Paul

Anzeige
AW: Excel Tabelle aufteilen und einzeln sichern
13.11.2014 10:58:35
Martin
Hallo Paul,
du hast keinen Fehler gemacht. Ich habe das Makro mit Excel 2003 geschrieben, damals gab es das xlsx-Dateiformat noch nicht. Ich dachte, dass ich einfach nur ein "x" an die alte Dateiendung "xls" hängen muss, aber anscheinend geht das nicht so einfach. Wenn dir das xls-Format ausreicht, das verwende folgenden Code zum Speichern und Schließen der neu erstellten Arbeitsmappe:
            With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xls"
.Close
End With
Wenn du die Dateien im xlsx-Format speichern möchtest, dann verwende folgenden Code:

With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xlsx", FileFormat:=51
.Close
End With
Die zweite Variante konnte ich wegen meiner alten Excel 2003-Version nicht testen.
Viele Grüße
Martin

Anzeige
Wo bleibt die Rückmeldung?
15.11.2014 12:42:48
Martin
Hallo Paul,
eine Rückmeldung ist doch das Mindeste?! Klappt das Makro nun wie gewünscht?
Martin

AW: Wo bleibt die Rückmeldung?
17.11.2014 10:02:30
Paul-Werner
Hallo Martin,
sorry, ich bin leider noch nicht zum Testen gekommen,ich werde das heute nachholen und Dir das Ergebnis mitteilen.
Erst einmal vielen Dank für Deine Unterstützung.
Payul

Anzeige
AW: Wo bleibt die Rückmeldung?
17.11.2014 16:34:08
Paul-Werner
Hallo Martin,
irgendwie sehe ich meine letzte Antwort nicht mehr.
Ich habe das nochmals getestet, wobei ich festgestellt habe, daß der von Dir genannte Code ja bereits im Makro enthalten ist? Ich habe also nochmals ein paar Varianten getestet, allerdings immer mit dem gleichen Fehler 400.
Gibt es eine Möglichkeit, mir Deine Excel 2003 zu schicken?
Danke und Grüße
Paul
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel Tabelle aufteilen und einzeln sichern


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle in mehrere Dateien aufzuteilen und sie einzeln zu speichern, kannst du folgendes VBA-Makro verwenden. Stelle sicher, dass du die Datei im richtigen Format speicherst, abhängig von deiner Excel-Version. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code in das Modul ein:

    Sub IndikatorenExportieren()
       Dim dicIdentNo As Object
       Dim strIdentNo As String
       Dim arrIdentNo As Variant
       Dim lngLastRow As Long, i As Long
       Set dicIdentNo = CreateObject("Scripting.Dictionary")
       'AutoFilter in Spalte A einrichten
       Columns("A:A").AutoFilter
       If Not ActiveSheet.AutoFilterMode Then
           Columns("A:A").AutoFilter
       End If
       'Letzte Zeile ermitteln
       lngLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
       'Alle Indikatoren ermitteln
       With dicIdentNo
           For i = 2 To lngLastRow
               strIdentNo = Trim(Cells(i, 1).Text)
               If Not .Exists(strIdentNo) Then
                   .Add strIdentNo, 0
               End If
           Next i
           'Alle Indikatoren in Array übertragen
           arrIdentNo = .keys
           'Jeden Indikator filtern und in neuer Arbeitsmappe speichern
           Application.ScreenUpdating = False
           Application.Calculation = xlCalculationManual
           For i = 0 To .Count - 1
               Selection.AutoFilter Field:=1, Criteria1:=arrIdentNo(i)
               Cells.SpecialCells(xlCellTypeVisible).Copy
               Workbooks.Add
               ActiveSheet.Paste
               Selection.Columns.AutoFit
               Range("A1").Select
               With ActiveWorkbook
                   .SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xlsx"
                   .Close
               End With
           Next
           Application.ScreenUpdating = True
           Application.Calculation = xlCalculationAutomatic
       End With
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.
  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

  • Fehler 400: Wenn du diesen Fehler erhältst, könnte das daran liegen, dass das Makro nicht in der richtigen Excel-Version ausgeführt wird. Stelle sicher, dass du den korrekten Dateiformat-Code verwendest. Für .xls verwende:

    .SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xls"

    Für .xlsx:

    .SaveAs ThisWorkbook.Path & "/" & arrIdentNo(i) & ".xlsx", FileFormat:=51
  • Dateien werden nicht gespeichert: Überprüfe, ob der Pfad, in dem die Dateien gespeichert werden sollen, korrekt ist. Ersetze ThisWorkbook.Path durch den gewünschten Pfad.


Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du die Excel-Tabelle auch manuell aufteilen:

  1. Filtere die Daten nach dem gewünschten Kriterium.
  2. Kopiere die gefilterten Daten in eine neue Excel-Datei.
  3. Speichere jede Datei einzeln.

Diese Methode ist jedoch zeitaufwändiger, besonders bei großen Datenmengen.


Praktische Beispiele

Angenommen, du hast eine Excel-Tabelle mit Kundendaten, die du nach Regionen aufteilen möchtest. Du kannst das oben genannte Makro verwenden, um Daten für jede Region in separate Dateien zu exportieren. Jedes Arbeitsblatt wird automatisch mit dem entsprechenden Regionsnamen gespeichert.


Tipps für Profis

  • Nutze die AutoFilter-Funktion, um deine Excel-Tabelle nach verschiedenen Kriterien effizient aufzuteilen.
  • Automatisiere den Speichervorgang, indem du den Speicherort im Makro vordefinierst.
  • Teste das Makro zuerst mit einer kleinen Datenmenge, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Kann ich das Makro in jeder Excel-Version verwenden?
Das Makro wurde in Excel 2003 geschrieben, funktioniert aber auch in neueren Versionen, solange das .xls oder .xlsx Format unterstützt wird.

2. Wie kann ich das Makro anpassen, um andere Spalten zu verwenden?
Ändere einfach die Spaltenbezüge im VBA-Code. Zum Beispiel, wenn du Spalte B statt A verwenden möchtest, ändere Columns("A:A") zu Columns("B:B").

3. Was mache ich, wenn ich mehr als 65.536 Zeilen habe?
In diesem Fall solltest du sicherstellen, dass du das .xlsx Format verwendest, da dies mehr Zeilen unterstützt als das .xls Format.

4. Wie kann ich sicherstellen, dass die Daten korrekt gespeichert werden?
Führe das Makro immer in einer Testumgebung mit einer Kopie deiner Daten aus, bevor du es auf die vollständige Datei anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige