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:
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 lRowEnd SubIf WorksheetFunction.CountA(Range("A" & Ze & ":J" & Ze)) > 0 ThenNext Ze Close #FF MsgBox "Fertig!"Zeile = "" For Sp = 1 To 9End IfZelle = 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
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.
[whohit]T&T: Bereiche speichern als *.csv[/whohit]