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

CSV Export aufteilen

CSV Export aufteilen
20.05.2023 08:49:35
Ulrich

Guten Tag in die Runde.

ich habe eine intelligente Tabelle, die ich gerne als CSV exportieren möchte.

Dazu würde ich mir folgenden Ablauf wünschen:
1.) Kopie der Datei an einen bestimmten Ort speichern. Der Speicherort soll einen fixen Bestandteil haben und der Dateiname soll sich aus dann weiterhin aus Kunde und Auftragsnummer zusammensetzen, die in der Tabelle angegeben sind.
2.) Sortieren der Daten / das funktioniert soweit

Sub Sortieren()

'Sortieren nach Stoffe und Nr

Range("tbl_GESAMT").Sort Key1:=Range("tbl_GESAMT[STOFF]"), Order1:=xlAscending, Header:=xlYes, Key2:=Range("tbl_GESAMT[NR]"), Order1:=xlAscending, Header:=xlYes

'Sortieren nach Modell, Design und Größe

Range("tbl_GESAMT").Sort Key1:=Range("tbl_GESAMT[MODELL]"), Order1:=xlAscending, Header:=xlYes, Key2:=Range("tbl_GESAMT[DESIGN]"), Order1:=xlAscending, Header:=xlYes, Key3:=Range("tbl_GESAMT[GROESSE_SORT]"), Order1:=xlAscending, Header:=xlYes

End Sub


3.) Exportieren der Daten in aufgeteilte CSV
So das ist dann eigentlich mein Hauptproblem... ich brauche einzelne CSV Dateien zu jeweils einer Datengruppe... im Beispiel ist es so, dass nach der Spalte GROESSE_SORT die für die CSV zu exportierenden Daten ausgewählt werden sollen und dann alle Daten dieser Größe in eine einzelne CSV geschrieben werden sollen; das muss dann so oft wiederholt werden, bis alle in diesem Auftrag verwendeten Größen abgearbeitet sind. Die hierbei erstellten Dateien sollen dann auch in den in Punkt 1 erstellten Ordner gespeichert werden.

Meine Frage dazu kann man das so umsetzten?

Da leider die Datei > 300 kb hier ein externer Link dazu: https://1drv.ms/x/s!Ao3MpN-ykRy_jvsTMjEjBSeeuiaRJA?e=8dJjlx

Bin für jede Hilfe sehr Dankbar...

Gruß Uli

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Export aufteilen
20.05.2023 09:50:02
Oberschlumpf
Hi Uli,

ja, ich weiß, die Datei ist jetzt schon ü 2MB groß, und enthält trotzdem nur eher wenig Datenzeilen - aber nur von einem Kunden!

Da die Tabelle "GESAMT" heißt, vermute ich dann richtig, dass in dieser Tabelle eigtl mehrere, unterschiedliche Kundendatenzeilen enthalten sind, die zwar in Spalte "GROESSE_SORT" immer wieder mal die gleichen Werte haben können, trotzdem aber in - unterschiedlichen - csv-Dateien gespeichert werden müssen, weil eben unterschiedliche Kunden?

Ciao
Thorsten


Frage hat sich erledigt
20.05.2023 09:59:39
Oberschlumpf
Hi Uli,

ich seh gerad z Bsp in Zelle AK10 die Formel =WENN(B10="";"";$C$4)
So ist es also doch immer nur EIN KUNDE - ok

Ich versuch mal mein (VBA-)Glück.

Ciao
Thorsten


Anzeige
AW: Frage hat sich erledigt
20.05.2023 10:01:08
Ulrich Hönemann
Danke


AW: CSV Export aufteilen
20.05.2023 10:00:18
Ulrich Hönemann
Hallo Thorsten,

nein es wird immer nur einen einzelnen Kunden in dieser Datei geben...ich habe auch nicht wirklich eine Idee warum das Ding so groß ist.... Wie gesagt Ziel ist es csv Dateien für die einzelnen Größen der Modelle und Design Nummern zu erzeugen...


AW: CSV Export aufteilen
20.05.2023 10:09:57
Oberschlumpf
Hi Uli,

ich habe auch nicht wirklich eine Idee warum das Ding so groß ist

DAS Problem könntest du, aber nicht ich schon lösen:

1 Wähl Tabelle "Gesamt" aus
2. Drück die Tastenkombi STRG-End
wenn ich das mache, wird Zelle AQ901 markiert
3. Lösch mal alle leeren Zeilen - die Zeilen löschen! nicht nur den Inhalt, der ja schon nicht mehr da ist
so, wenn ich das mache, wird in fast allen Formelzellen nur noch #NAME angezeigt
das wird daran liegen, weil ich "nur" MSO 2016 nutze, und "mein Excel" kennt noch nicht alle neuen Formeln, die für dich in MSO365 privat verfügbar sind

Na ja, wenn du das mit dem Löschen der überflüssigen Zeilen in der Bsp-Dtei hinbekommen hast, und in den Datenzeilen noch immer alle Daten korrekt angezeigt werden, kannst du die bereinigte - und nun hofftl auch kleinere Datei - hier noch mal per Upload zur Verfügung stellen.

Ciao
Thorsten


Anzeige
AW: CSV Export aufteilen
20.05.2023 10:37:33
Oberschlumpf
na siehste! :-) ich probier weiter..


so, habe fertich...
20.05.2023 12:06:50
Oberschlumpf
...zumindest nach deinen Wünschen so, wie du sie formuliert hattest :-)

Hi Uli,

hier, probier mal
https://www.herber.de/bbs/user/159251.xlsm

Ich hab deiner Gesamt-Tabelle einen Button hinzugefügt.

1x Klick und es werden, erst mal eine Kopie der Bsp-Datei erstellt, und dann, zumindest in Bsp-Datei, 2 CSV-Dateien erstellt, weil es 2 unterschiedliche Werte in GROESSE_SORT gibt.

Beachte unbedingt alle Hinweise im Code.

Hilfts?

Ciao
Thorsten


Anzeige
AW: so, habe fertich...
20.05.2023 13:35:48
Ulrich Hönemann
Hallo Thorsten ... ganz herzlichen Dank bis hier... bin Unterwegs und gucke es mir dann an wenn ich vor dem Schreibtisch sitze.... Bis dahin Gruß Uli


AW: so, habe fertich...
20.05.2023 14:57:32
Ulrich Hönemann
Hallo Thorsten,

ich freue mir gerade ein Loch in den Bauch, oder könnte auch sagen bin glücklich wie ein Schnitzel...

Funktioniert einwandfrei... und sogar wenn ich mehrere Schnitte und Designs in einem Verarbeiten möchte geht das wenn ich GROESSE_SORT entsprechend befülle...

Ich hätte noch folgende Frage: Da ich jeden Tag massenhaft dieser Dateien verarbeiten werde, wäre es super wenn es noch möglich wäre den Speicherort mit zusätzlichen Informationen aus der Datei zu ergänzen... Hier ein Beispiel: C:\Users\pc\Desktop\EXPORT\data\ das wäre der fixeTeil... wo die Daten immer hin kommen...

Aus der Tabelle könnten dann AUFTRAG und KUNDE ausgelesen werden und ein neues Verzeichnis geschrieben werden, um im Beispiel zu bleibe: Felder C4 und C5

Es soll dann der Ordner C:\Users\pc\Desktop\EXPORT\data\23000-10856 erstellt werden und die Kopie und die CSV sollen dann in diesen Ordner gespeichert werden.

Hättest du hierzu vielleicht auch noch eine Idee?

Gruß Uli


Anzeige
AW: so, habe fertich...
21.05.2023 06:52:05
Oberschlumpf
Moin Uli

hier, bitte schön
https://www.herber.de/bbs/user/159259.xlsm

erst mal:
ich hab den fixen-Pfadteil auf "...EXPORT\data\" erweitert

der flexible Pfadteil setzt sich nun zusammen aus, wie du gewünscht hast - "...\AUFTRAG-KUNDE"
daraus ergibt sich ein Gesamt-Pfad, der lautet: "...EXPORT\data\AUFTRAG-KUNDE"

Vielleicht wunderst du dich, wieso auch der Gesamt-Pfad mit "..." beginnt.

Der Grund ist:
Dein fixer Pfad lautet "C:\Users\pc\Desktop\EXPORT\data\"
Auf meinem Computer gibt es aber nicht das Verzeichnis "...\pc\..." - und werde ich an der Stelle auch nicht anlegen, da "C:\Users\..." ein System-Verzeichnis ist, und das wird vollumfänglich von Windows verwaltet.

Deshalb lautet mein fixer Pfad weiterhin "D:\Herber\Uli\bestimmter Ort\..." und wird eben mit "...EXPORT\data\230000-10856" erweitert.
Im Code hab ich beide Pfade (deiner+meiner) angegeben und mit Kommentaren erklärt, was du ändern MUSST, damit schlussendlich in deinem WUNSCHpfad gespeichert wird.

Die Dateien erhalten weiterhin diese Namen:
"Gesamt-AUFTRAG-KUNDE.xlsm"
"CSV-AUFTRAG-KUNDE-GROESSE_SORT.csv"

Mich wunderte zwar, dass du sowohl im Pfad als auch in Dateinamen zuerst Auftrag, dann Kunde haben willst, aber ich hab es so für dich angepasst.
Jetzt solltest du Herr werden über die Datenflut, die auf dich wartet, oder? :-)

Hilfts?

Ciao
Thorsten


Anzeige
AW: so, habe fertich...
21.05.2023 13:07:28
Ulrich Hönemann
Ganz ganz herzlichen Dank.... funktioniert einwandfrei...

Kann ich mich irgendwie erkenntlich zeigen bei dir?

Gruß

Uli


AW: so, habe fertich...
21.05.2023 13:17:25
Oberschlumpf
hast du schon....dein "Danke" reicht völlig!...schönen Sonntag noch


AW: so, habe fertich...
22.05.2023 10:52:58
Ulrich Hönemann
Ahoi...

es funktioniert alles immer noch wunderbar... aber eine Frage hätte ich noch, obwohl in der Systemsteuertung das Listentrennzeichen auf ";" (Semikolon) steht, trennt es die neuen CSV mit "," (Komma)... gäbe es eine Möglichkeit das ";" zu verwenden, weil ein Komma schon mal in den Datenfeldern vorkommen kann?

Gruß

Uli


Anzeige
AW: so, habe fertich...
22.05.2023 11:28:42
Oberschlumpf
Hi Uli,

änder diese Zeile...

ActiveWorkbook.SaveAs Filename:=lstrPath & "CSV-" & .Range("AL" & lloRStart).Value & "-" & .Range("AK" & lloRStart).Value & "-" & .Range("AQ" & lloRStart).Value & ".csv", FileFormat:=xlCSVUTF8, CreateBackup:=False
...um in...

ActiveWorkbook.SaveAs Filename:=lstrPath & "CSV-" & .Range("AL" & lloRStart).Value & "-" & .Range("AK" & lloRStart).Value & "-" & .Range("AQ" & lloRStart).Value & ".csv", FileFormat:=xlCSVUTF8, Local:=True, CreateBackup:=False
...jetzt ist wieder das Semikolon das Trennzeichen, oder?

Ciao
Thorsten


Anzeige
AW: so, habe fertich...
22.05.2023 11:45:22
Ulrich Hönemann
Ja ist es...

und wieder HERZLICHEN DANK


AW: CSV Export aufteilen
20.05.2023 10:14:56
Ulrich Hönemann
Das Problem ist schon mal gelöst gewesen für eine andere Datei aber ich kann es nicht auf diese übertragen, und in der anderen Datei kann ich nicht rumschreiben...

Private Sub ExportCopy()

Set objWS = CreateObject("WScript.Shell")
strDesktopPath = objWS.SpecialFolders("Desktop")
saveLocation = strDesktopPath & "\Export\" '//Change as required, make sure you have a trailing "\"
Kunde = Range("Kunde").Value
Auftrag = Range("Auftrag").Value
saveFile = saveLocation & "Datentabelle_" & Kunde & "_" & Auftrag & ".xlsm"

If Dir(saveFile) = "" Then
    ActiveWorkbook.SaveCopyAs saveFile
Else
    ActiveWorkbook.SaveAs saveFile
End If

End Sub

Sub ExportButton()

Sortieren

ExportCopy

'Definiere Bereich zum exportieren

infoRow = 9
zeilestart = infoRow + 1
Auftrag = Range("Auftrag").Value

'spaltestart = 2
'spaltestopp = 27
'Range(Cells(zeilestart, spaltestart), Cells(zeilestopp, spaltestopp)).Activate
'Cells(zeilestart, 1).Activate
Range("SORT_START").Activate

Dim FF As Integer
Dim wLine As String
Dim saveLocation As String
Dim cID As String
Dim lRow As Long

Set objWS = CreateObject("WScript.Shell")
strDesktopPath = objWS.SpecialFolders("Desktop")
saveLocation = strDesktopPath & "\Export\" '//Change as required, make sure you have a trailing "\"

'Erstelle Ordner, falls nicht vorhanden
If Dir(saveLocation, vbDirectory) = vbNullString Then
        MkDir saveLocation
        MsgBox "Created folder " & saveLocation
End If

Do
    FF = FreeFile
    cID = ActiveCell.Value
    Open saveLocation & cID & "__" & Auftrag & ".csv" For Output As #FF
    Print #FF, Cells(infoRow, 1) & "," & Cells(infoRow, 3) & "," & Cells(infoRow, 4) & "," & Cells(infoRow, 5) & "," & Cells(infoRow, 6) & "," & Cells(infoRow, 7) & "," & Cells(infoRow, 8) & "," & Cells(infoRow, 9) & "," & Cells(infoRow, 10) & "," & Cells(infoRow, 11) & "," & Cells(infoRow, 12) & "," & Cells(infoRow, 13) & "," & Cells(infoRow, 14) & "," & Cells(infoRow, 15) & "," & Cells(infoRow, 16) & "," & Cells(infoRow, 17) & "," & Cells(infoRow, 18) & "," & Cells(infoRow, 19) & "," & Cells(infoRow, 20) & "," & Cells(infoRow, 21) & "," & Cells(infoRow, 22) & "," & Cells(infoRow, 23) & "," & Cells(infoRow, 24) & "," & Cells(infoRow, 25) & "," & Cells(infoRow, 26) & "," & Cells(infoRow, 27) & "," & Cells(infoRow, 28) & "," & Cells(infoRow, 29)
        While ActiveCell.Value = cID
            lRow = ActiveCell.Row
            Dim cell23 As String
            cell27 = Cells(lRow, 27)
            cell27 = RemoveChars(cell27, ".,!?:/\\")
            Dim cell29 As String
            cell29 = Cells(lRow, 29)
            cell29 = RemoveChars(cell29, ".,!?:/\\")
            Print #FF, Cells(lRow, 1) & "," & Cells(lRow, 3) & "," & Cells(lRow, 4) & "," & Cells(lRow, 5) & "," & Cells(lRow, 6) & "," & Cells(lRow, 7) & "," & Cells(lRow, 8) & "," & Cells(lRow, 9) & "," & Cells(lRow, 10) & "," & Cells(lRow, 11) & "," & Cells(lRow, 12) & "," & Cells(lRow, 13) & "," & Cells(lRow, 14) & "," & Cells(lRow, 15) & "," & Cells(lRow, 16) & "," & Cells(lRow, 17) & "," & Cells(lRow, 18) & "," & Cells(lRow, 19) & "," & Cells(lRow, 20) & "," & Cells(lRow, 21) & "," & Cells(lRow, 22) & "," & Cells(lRow, 23) & "," & Cells(lRow, 24) & "," & Cells(lRow, 25) & "," & Cells(lRow, 26) & "," & cell27 & "," & Cells(lRow, 28) & "," & cell29
            ActiveCell.Offset(1, 0).Activate
        Wend
    Close #FF
    Name saveLocation & cID & "__" & Auftrag & ".csv" As saveLocation & cID & "__" & Auftrag & ".csv"
'Loop Until ActiveCell.Row > Range("ExportSTOPP").Value
Loop Until ActiveCell.Value = ""

Cells(10, 1).Activate

Call Shell("explorer.exe" & " " & saveLocation, vbNormalFocus)
MsgBox "Erstellte Excel-Datei bitte in Kundenordner verschieben"

     Worksheets(ActiveSheet.Name).Sort.SortFields.Clear

End Sub

Sub Sortieren()

With ActiveSheet.Sort
     .SortFields.Add Key:=Range("A9"), Order:=xlAscending
     .SortFields.Add Key:=Range("B9"), Order:=xlAscending
     .SortFields.Add Key:=Range("C9"), Order:=xlAscending
     .SortFields.Add Key:=Range("D9"), Order:=xlAscending
     .SetRange Range("A9:AA1000")
     
     .Header = xlYes
     .Apply
End With

     Worksheets(ActiveSheet.Name).Sort.SortFields.Clear

End Sub

' beliebige Zeichen entfernen / ersetzen
Public Function RemoveChars(ByVal Source As String, ByVal Chars As String, _
  Optional ByVal ReplaceWith As String = "") As String
 
  ' RegExp via Late-Bindung instanzieren
  Dim oRegExp As Object  ' RegExp
  Set oRegExp = CreateObject("VBScript.RegExp")
 
  With oRegExp
    .IgnoreCase = True
    .Global = True
    .MultiLine = True
    .Pattern = "[\" & Chars & "]"
 
    ' alle nicht zulässigen Zeichen ersetzen
    RemoveChars = .Replace(Source, ReplaceWith)
  End With
  Set oRegExp = Nothing
End Function
Und der Code ist schlecht kommentiert und überhaupt nicht aufgeräumt...


Anzeige
AW: CSV Export aufteilen
20.05.2023 10:17:20
Oberschlumpf
hä? und genau was willst du mir - damit - nun sagen?
zumindest seh ich keinen Zusammenhang zwischen meinem Hinweis bzgl Zeilen löschen, speichern, hier noch mal uploaden und deiner jetzigen Antwort.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige