CSV-Export (Bereiche)

Nur bestimmte Bereiche als *.csv exportieren

Ein ganzes Arbeits­blatt als *.csv zu spe­ich­ern, das ist ja nicht so schw­er. Das geht sog­ar ohne VBA. Wenn allerd­ings nur bes­timmte Bere­iche exportiert wer­den sollen oder son­stige Ein­schränkun­gen vor­liegen, dann ist ein Makro erforder­lich.

Im fol­gen­den Beispiel sollen aus dem aktuellen Arbeits­blatt nur die Spalte 1:10 exportiert wer­den. Als zusät­zliche Ein­schränkung gilt, dass Zeilen, die in den ersten 10 Spal­ten keinen Inhalt haben (also leer sind), auch nicht exportiert wer­den sollen. Wenn in der Zeile ab Spalte 11 (Spalte K) Ein­träge sind, so ist dieses nicht rel­e­vant.

Den­noch zu Beginn eine Lösung, die trotz der Ein­schränkun­gen ohne ein Makro auskommt:

  • Erstellen Sie von dem Arbeits­blatt auf beliebige Weise eine Kopie.
  • Hier löschen Sie alle Spal­ten, die nicht exportiert wer­den sollen.
  • Löschen Sie alle leeren Spal­ten von Hand oder falls das zu unüber­sichtlich oder zu aufwendig ist:
    • Falls keine Über­schriftzeile existiert, fügen Sie eine ein und tra­gen beliebige Über­schriften ein.
    • Erstellen Sie eine Hil­f­ss­palte rechts der let­zten Spalte, in unserem Beispiel wäre das Spalte K)
    • Geben Sie auch hier eine Über­schrift ein, sie dient gle­ich dem Fil­tern.
    • Schreiben Sie in Zelle K2 (also die erste Zeile mit den Dat­en in der Hil­f­ss­palte) diese Formel hinein: =ANZAHL2(A1:J1)
    • Lassen Sie sich per Aut­oFil­ter in Spalte K nur die Zeilen anzeigen, wo in dieser Spalte der Wert 0 ste­ht. Wo also keine Spalte einen Wer­rt enthält.
    • Löschen Sie alle gefilterten Zeilen.
    • Blenden Sie wieder alle Zeilen ein, ent­fer­nen Sie den Fil­ter.
  • Dieses Arbeits­blatt kön­nen Sie nun ganz nor­mal als *.csv mit der Spe­ich­ern unter – Option exportieren.

Ist Ihnen das zu müh­selig oder Sie brauchen das öfter? Dieser Code macht das automa­tisch:


Option Explicit

Sub alsCSVschreiben()

Dim Ze As Long, Sp As Integer Dim FF As Integer Dim FullPath As String Dim lRow As Long Dim Zeile As String, Zelle As String lRow = Cells.Find(what:="*", _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row FullPath = "D:\DataTest.csv" FF = FreeFile Open FullPath For Output As #FF For Ze = 1 To lRow
If WorksheetFunction.CountA(Range("A" & Ze & ":J" & Ze)) > 0 Then
Zeile = "" For Sp = 1 To 9
Zelle = Cells(Ze, Sp) If Not IsNumeric(Zelle) Then Zelle = Chr(34) & Zelle & Chr(34) Zeile = Zeile & Zelle & ";"
Next Sp Zelle = Cells(Ze, 10) 'Falls Anführungszeichen in der csv verwendet werden müssen 'If Not IsNumeric(Zelle) Then Zelle = Chr(34) & Zelle & Chr(34) Zeile = Zeile & Zelle Print #1, Zeile
End If
Next Ze Close #FF MsgBox "Fertig!"
End Sub

Noch ein Hin­weis dazu: Wenn Sie mit ein­schließen­den Anführungsze­ichen für Texte arbeit­en, dann darf im Text kein Anführungsze­ichen vorkom­men, auch kein einzelnes wie beispiel­sweise bei 3,5″ (3,5 Zoll); das würde zu Kom­p­lika­tio­nen führen. Sie kön­nten in solchen Fällen nur mit aufwendi­gem Code zu ein­er zufrieden­stel­len­den Lösung kom­men.

Wenn es sich um sehr große Dateien han­delt und die Laufzeit des Makros deut­lich zu merken ist, dann ist es denkbar, alle zu exportieren­den Zeilen erst ein­mal in ein Array zu schreiben und dann das Array mit einem Schlag als *.csv zu exportieren:

Option Explic­it

Sub Spe­iche­re­AlsCSV()

Dim aDa­ta As Vari­ant

Dim i As Long, k As Inte­ger, bolMit­Da­ta As Boolean

Dim strAus­gabe As String, FF As Long

Dim lRow As Long

lRow = Cells.Find(What:=”*”, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

aDa­ta = Range(„A1:J” & lRow)

For i = LBound(aData, 1) To UBound(aData, 1)

bolMit­Da­ta = False

For k = 1 To 10

If Not IsEmpty(aData(i, k)) Then

bolMit­Da­ta = True

Exit For

End If

Next k

If bolMit­Da­ta Then strAus­gabe = strAus­gabe & _

Join(Application.Index(aData, i), „;”) & vbCrLf

Next i

strAus­gabe = Left(strAusgabe, Len(strAusgabe) – 2)

FF = FreeFile

Open „D:\DataTest2.csv” For Out­put As #FF

Print #FF, strAus­gabe;

Close #FF

End Sub

Diese Proze­dur exportiert sie Strings ohne Anführungsze­ichen, wie es auch bei einem händis­chen Export direkt unter Excel geschieht.

▲ nach oben …

[whohit]T&T: Bere­iche spe­ich­ern als *.csv[/whohit]

Dieser Beitrag wurde unter Code-Schnipsel, Daten-Import / -Export, Join-Art, Mit VBA/Makro, Musterlösungen, Tipps und Tricks veröffentlicht. Setze ein Lesezeichen auf den Permalink.