CSV-Export (Bereiche)

Nur bestimmte Bereiche als *.csv exportieren

Ein ganzes Arbeitsblatt als *.csv zu speichern, das ist ja nicht so schwer. Das geht sogar ohne VBA. Wenn allerdings nur bestimmte Bereiche exportiert werden sollen oder sonstige Einschränkungen vorliegen, dann ist ein Makro erforderlich.

Im folgenden Beispiel sollen aus dem aktuellen Arbeitsblatt nur die Spalte 1:10 exportiert werden. Als zusätzliche Einschränkung gilt, dass Zeilen, die in den ersten 10 Spalten keinen Inhalt haben (also leer sind), auch nicht exportiert werden sollen. Wenn in der Zeile ab Spalte 11 (Spalte K) Einträge sind, so ist dieses nicht relevant.

Dennoch zu Beginn eine Lösung, die trotz der Einschränkungen ohne ein Makro auskommt:

  • Erstellen Sie von dem Arbeitsblatt auf beliebige Weise eine Kopie.
  • Hier löschen Sie alle Spalten, die nicht exportiert werden sollen.
  • Löschen Sie alle leeren Spalten von Hand oder falls das zu unübersichtlich oder zu aufwendig ist:
    • Falls keine Überschriftzeile existiert, fügen Sie eine ein und tragen beliebige Überschriften ein.
    • Erstellen Sie eine Hilfsspalte rechts der letzten Spalte, in unserem Beispiel wäre das Spalte K)
    • Geben Sie auch hier eine Überschrift ein, sie dient gleich dem Filtern.
    • Schreiben Sie in Zelle K2 (also die erste Zeile mit den Daten in der Hilfsspalte) diese Formel hinein: =ANZAHL2(A1:J1)
    • Lassen Sie sich per AutoFilter in Spalte K nur die Zeilen anzeigen, wo in dieser Spalte der Wert 0 steht. Wo also keine Spalte einen Werrt enthält.
    • Löschen Sie alle gefilterten Zeilen.
    • Blenden Sie wieder alle Zeilen ein, entfernen Sie den Filter.
  • Dieses Arbeitsblatt können Sie nun ganz normal als *.csv mit der Speichern unter – Option exportieren.

Ist Ihnen das zu mühselig oder Sie brauchen das öfter? Dieser Code macht das automatisch:

Noch ein Hinweis dazu: Wenn Sie mit einschließenden Anführungszeichen für Texte arbeiten, dann darf im Text kein Anführungszeichen vorkommen, auch kein einzelnes wie beispielsweise bei 3,5″ (3,5 Zoll); das würde zu Komplikationen führen. Sie könnten in solchen Fällen nur mit aufwendigem Code zu einer zufriedenstellenden Lösung kommen.

Wenn es sich um sehr große Dateien handelt und die Laufzeit des Makros deutlich zu merken ist, dann ist es denkbar, alle zu exportierenden Zeilen erst einmal in ein Array zu schreiben und dann das Array mit einem Schlag als *.csv zu exportieren:

Option Explicit

Sub SpeichereAlsCSV()

Dim aData As Variant

Dim i As Long, k As Integer, bolMitData As Boolean

Dim strAusgabe As String, FF As Long

Dim lRow As Long

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

aData = Range(“A1:J“ & lRow)

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

bolMitData = False

For k = 1 To 10

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

bolMitData = True

Exit For

End If

Next k

If bolMitData Then strAusgabe = strAusgabe & _

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

Next i

strAusgabe = Left(strAusgabe, Len(strAusgabe) – 2)

FF = FreeFile

Open „D:\DataTest2.csv“ For Output As #FF

Print #FF, strAusgabe;

Close #FF

End Sub

Diese Prozedur exportiert sie Strings ohne Anführungszeichen, wie es auch bei einem händischen Export direkt unter Excel geschieht.

▲ nach oben …

[whohit]T&T: Bereiche speichern als *.csv[/whohit]

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