.xls Exel Datei Splitten nach Kundennummer mit batch
Mir wurde schon viel geholfen hier im Forum und ich würde gerne mehr über verschiedene möglichkeiten lernen um nicht ständig zu fragen.
Doch leider muss ich wieder nerven
Hallo an alle die diesen Beitrag lesen und im besten Fall auch noch hilfreich sein kann.
Es geht um eine .xls Datei die in verschiedenen Dateien aufgelistet werden muss.
Hier soll er dann die Kundennummer der Spalte A nehmen, um eine neue Datei anzulegen (gerne eine .xls)
Als Bezeichnung der neuen Datei soll er dann den Inhalt der Spalte B nehmen.
Die restlichen Spalten soll er so in die neue Datei Schreiben und die Spalte A und B eben Weglassen.
In Zeile 1 soll er dann in jeder Datei Artikelnummer, Bezeichnung und Menge anzeigen.
cih weiss nicht ob es wichtig ist aber einige Artikelnummern fangen mit einem Buchstaben an. (nicht alle)
Hier ein Beispiel des Aufbau der Exportierten Datei.
A B C D E
1 Kundennummer Kunde Artikelnummer Bezeichnung Menge
2 12345 12345 Hans Wurst, Wohnort 12309 Zucker 150
3 12345 12345 Hans Wurst, Wohnort 8520 Ball 10
4 67890 67890 Max Mustermann, Wohnort G1234 Limoade 900
5 67890 67890 Max Mustermann , Wohnot 222111 Beton 1
Ich habe leider keinen Plan obdas mit Batch geht, sorry.
Aber ich bin guter Dinge hier hilfe zu bekommen.
Hier eine besser Ansicht
Doch leider muss ich wieder nerven
Hallo an alle die diesen Beitrag lesen und im besten Fall auch noch hilfreich sein kann.
Es geht um eine .xls Datei die in verschiedenen Dateien aufgelistet werden muss.
Hier soll er dann die Kundennummer der Spalte A nehmen, um eine neue Datei anzulegen (gerne eine .xls)
Als Bezeichnung der neuen Datei soll er dann den Inhalt der Spalte B nehmen.
Die restlichen Spalten soll er so in die neue Datei Schreiben und die Spalte A und B eben Weglassen.
In Zeile 1 soll er dann in jeder Datei Artikelnummer, Bezeichnung und Menge anzeigen.
cih weiss nicht ob es wichtig ist aber einige Artikelnummern fangen mit einem Buchstaben an. (nicht alle)
Hier ein Beispiel des Aufbau der Exportierten Datei.
A B C D E
1 Kundennummer Kunde Artikelnummer Bezeichnung Menge
2 12345 12345 Hans Wurst, Wohnort 12309 Zucker 150
3 12345 12345 Hans Wurst, Wohnort 8520 Ball 10
4 67890 67890 Max Mustermann, Wohnort G1234 Limoade 900
5 67890 67890 Max Mustermann , Wohnot 222111 Beton 1
Ich habe leider keinen Plan obdas mit Batch geht, sorry.
Aber ich bin guter Dinge hier hilfe zu bekommen.
Hier eine besser Ansicht
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 171615
Url: https://administrator.de/forum/xls-exel-datei-splitten-nach-kundennummer-mit-batch-171615.html
Ausgedruckt am: 24.12.2024 um 13:12 Uhr
15 Kommentare
Neuester Kommentar
Hallo Underdog81!
Dann versuch es mit folgendem VBA-Script:
Vorausgesetzt habe ich, dass alle Kundennamen sich unterscheiden und somit kein Dateiname doppelt vorkommt - sicherer wäre (als Zeile 29)
Grüße
bastla
Dann versuch es mit folgendem VBA-Script:
Option Base 1
Sub Aufteilen()
'Quelle
Const AbZeileQuelle As Integer = 2 'erste Datenzeile
Const SpalteQuelleKNr As String = "A"
Const SpalteQuelleName As String = "B"
Const AbSpalteDaten As String = "C"
'Ziel
Const Zielpfad As String = "D:\Einzeldateien\" 'Pfad muss mit "\" enden
Const AbZeileZiel As Integer = 1 'Kopfzeile
Const AbSpalteZiel As String = "A"
Dim Kopfzeile() As Variant
Kopfzeile = Array("Artikelnummer", "Bezeichnung", "Menge") 'Kopfzeile = Spaltenüberschriften in Zieldatei
Spalten = UBound(Kopfzeile) 'Anzahl der Datenspalten lt festgelegter Kopfzeile
Set Quelle = ActiveWorkbook.ActiveSheet
ZeileQuelle = AbZeileQuelle
With Quelle
KNr = .Cells(ZeileQuelle, SpalteQuelleKNr).Value 'KNr auslesen
KNrZuletzt = ""
Do While KNr <> "" 'solange Daten vorhanden (KNr-Spalte nicht leer)
If KNr <> KNrZuletzt Then 'neuer Kunde?
If Not KNrZuletzt = "" Then 'Wenn nicht allererster Datensatz,
Zieldatei.ActiveSheet.Cells.EntireColumn.AutoFit 'optimale Spaltenbreite festlegen,
Zieldatei.SaveAs Zielpfad & Dateiname 'Zieldatei speichern und
Zieldatei.Close 'schließen
End If
Dateiname = .Cells(ZeileQuelle, SpalteQuelleName).Value 'Dateinamen auslesen
Set Zieldatei = Workbooks.Add 'neue Datei erstellen
ZeileZiel = AbZeileZiel
Zieldatei.ActiveSheet.Cells(ZeileZiel, AbSpalteZiel).Resize(1, Spalten).Value = Kopfzeile 'Kopfzeile eintragen
KNrZuletzt = KNr
End If
ZeileZiel = ZeileZiel + 1 'nächste Zeile in Zieltabelle
.Cells(ZeileQuelle, AbSpalteDaten).Resize(1, Spalten).Copy Zieldatei.ActiveSheet.Cells(ZeileZiel, AbSpalteZiel) 'Datenspalten in Zieldatei kopieren
ZeileQuelle = ZeileQuelle + 1 'nächste Zeile in Quelltabelle
KNr = Quelle.Cells(ZeileQuelle, SpalteQuelleKNr).Value 'KNr auslesen
Loop
If Not KNrZuletzt = "" Then 'Wenn nicht allererster Datensatz,
Zieldatei.ActiveSheet.Cells.EntireColumn.AutoFit 'optimale Spaltenbreite festlegen,
Zieldatei.SaveAs Zielpfad & Dateiname 'Zieldatei speichern und
Zieldatei.Close 'schließen
End If
End With
End Sub
Dateiname = KNr & "_" & .Cells(ZeileQuelle, SpalteQuelleName).Value 'Dateinamen aus KNr und Namen erstellen
bastla
Na schön, dann hangeln wir uns weiter ...
Tausche den ersten Teil gegen
aus ...
Grüße
bastla
[Edit] Zeile 7 angepasst [/Edit]
Tausche den ersten Teil gegen
Sub Aufteilen()
AbZeileQuelle = 2
SpalteQuelleKNr = "A"
SpalteQuelleName = "B"
AbSpalteDaten = "C"
Zielpfad = "D:\Einzeldateien\" 'Pfad muss mit "\" enden
AbZeileZiel = 1
AbSpalteZiel = "A"
Dim Kopfzeile()
Grüße
bastla
[Edit] Zeile 7 angepasst [/Edit]
Hallo Underdog81!
Schön, wenn es funktioniert - das tut es (ohne Fehlermeldungen) aber sicher nur, wenn sich nur eine einzige Datei im Ordner "C:\Ordner_der_zu_bearbeitenden_Datei" befindet; anderenfalls würde jede "
Wenn es aber nur um eine einzelne Datei geht, sind die beiden Schleifen (Zeilen 13 und 15) zu hinterfragen - dort wird nämlich festgelegt, dass alle der (per "
Dass der Kommentar in der Zeile 11 nicht dem davor stehenden Befehl entspricht, ist zu vernachlässigen (wenngleich dieser Befehl aber eigentlich nur mit einem "
Noch kurz (für Interessierte) zur Erklärung, warum die beschriebene Vorgangsweise gewählt wurde: Da die zu bearbeitende Datei regelmäßig (per Export) neu erstellt wird, kann das Script nicht in dieser Datei selbst gespeichert werden - als Alternative blieben dann nur die "Persönliche Makroarbeitsmappe" oder eben das (hier verwendete) Ablegen in einer weiteren Excel-Datei ...
Grüße
bastla
P.S.: Thx @Biber (und dass der Konjunktiv nicht ernst gemeint war, ist auch klar )
Schön, wenn es funktioniert - das tut es (ohne Fehlermeldungen) aber sicher nur, wenn sich nur eine einzige Datei im Ordner "C:\Ordner_der_zu_bearbeitenden_Datei" befindet; anderenfalls würde jede "
Const
"-Zeile (Zeilen 20 bis 28) einen Fehler bewirken ...Wenn es aber nur um eine einzelne Datei geht, sind die beiden Schleifen (Zeilen 13 und 15) zu hinterfragen - dort wird nämlich festgelegt, dass alle der (per "
Array
" in Zeile 13) angegebenen Ordner (ist aber nur einer ) bearbeitet werden sollen, bzw dass der folgende Code auf alle sich in diesen Ordnern befindlichen ".xls"-Dateien angewendet werden soll (wobei Letzteres tatsächlich aber auch für eine einzelne Datei sinnvoll sein kann, wenn deren Name nicht konstant ist). Jedenfalls wären aber die Zeilen 19 bis 32 vor der Zeile 13 zu platzieren.Dass der Kommentar in der Zeile 11 nicht dem davor stehenden Befehl entspricht, ist zu vernachlässigen (wenngleich dieser Befehl aber eigentlich nur mit einem "
False
" Sinn ergäbe; ansonsten könntest Du diese Zeile zusammen mit Zeile 70 entsorgen) ...Noch kurz (für Interessierte) zur Erklärung, warum die beschriebene Vorgangsweise gewählt wurde: Da die zu bearbeitende Datei regelmäßig (per Export) neu erstellt wird, kann das Script nicht in dieser Datei selbst gespeichert werden - als Alternative blieben dann nur die "Persönliche Makroarbeitsmappe" oder eben das (hier verwendete) Ablegen in einer weiteren Excel-Datei ...
Grüße
bastla
P.S.: Thx @Biber (und dass der Konjunktiv nicht ernst gemeint war, ist auch klar )