Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV-Export per VBA (bestimmter Bereich)

CSV-Export per VBA (bestimmter Bereich)
23.02.2017 16:15:27
Hendrik
Hallo liebe Excel-Community
jahrelang habe ich von diesem Forum und ähnlichen im Internet profitiert und musste noch nie selber einen Beitrag verfassen. Jetzt aber ist es soweit. Eventuell ist mein Thema zu speziell oder ich hab das Recherchieren verlernt. Nichtdestotrotz....hier ist mein Problem.
Ich möchte per VBA-Makro einen bestimmten Bereich eines Tabellenblattes (Spalten A bis P) und alle Zeilen, die in A einen Wert bzw. Text haben (wird per Formel errechnet) in eine CSV-Datei exportieren. Trennzeichen soll das Semikolon sein. Der Nutzer soll sich den Speicherort nicht frei auswählen dürfen, d.h. der Pfad ist festgelegt. Der Name der Datei soll in etwa so aussehen "BLABLABLATEXT_datum_zeit.csv".
Ich hab auch schon eine Teillösung erarbeitet, aber die ist so unreif, dass ich die hier nicht zeigen werde.
An dieser Stelle schon mal ein großes Dankeschön für eure Hilfe.
Beste Grüße
Hendrik
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
CSV-Export per VBA (bestimmter Bereich)
23.02.2017 16:58:45
Michael
Hi Hendrik,
teste mal:
Option Explicit
Function CSV_Erzeugen(blatt, Spalten$, Pfad$, t1$, t2$) As String
Dim aSp ' = as variant als Array
Dim z&, s&, st$, maxZ& ' & = as long z wie Zeile, $ = as string,
' s wie string für Ausgabe
Dim d As Integer ' d wie Dateinummer
On Error GoTo fehler
With Sheets(blatt)
aSp = Intersect(.Range(Spalten), .UsedRange)
End With
maxZ = UBound(aSp)
For z = 1 To maxZ
If aSp(z, 1)  "" Then
For s = 1 To UBound(aSp, 2) - 1
st = st & aSp(z, s) & t2
Next
st = st & aSp(z, s) & t1
End If
Next
' statt For-Schleife kannst Du auch mal join() testen
d = FreeFile
Open Pfad For Output As #1
Print #1, st
Close #1
fehler:
If Err.Number  0 Then CSV_Erzeugen = Err.Description Else CSV_Erzeugen = "ok"
End Function
Sub aufruf()
Dim Pfad$, Ergebnis$
Pfad = "C:\DeinPfad\DateiName_" & Format(Date, "YYYYMMDD") & _
"_" & Format(Time, "hhmmss") & ".csv"
'If Dir(Pfad) = "" Then
'  Ergebnis = CSV_Erzeugen("Tabelle1", "A1", Pfad, vbCrLf,";")
'  If Ergebnis = "ok" Then
'     MsgBox "Datei " & Pfad & " wurde erzeugt"
'    Else
'     MsgBox "Fehler: " & Ergebnis
'  End If
' Else
'  MsgBox "Datei bereits vorhanden"
'End If
' *** oder ganz einfach:
MsgBox CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
' Trennen z.B. mit: vblf, vbcr oder vbcrlf
End Sub
Schöne Grüße,
Michael
Anzeige
AW: CSV-Export per VBA (bestimmter Bereich)
24.02.2017 10:11:11
Hendrik
Hallo Michael,
erstmal vielen Dank für deine zügige Antwort. Leider funktioniert der Code bei mir nicht. Ich erhalte die Fehlermeldung "Index außerhalb des gültigen Bereichs". Ich habe den Speicherpfad angepasst. Muss ich sonst noch irgendwelche Anpassungen vornehmen?
Leider hab ich keine VBA-Erfahrung und kann den Code kaum lesen oder editieren. Nur offensichtliche Funktionen wie Range("A1:H8") oder Worksheets("Sheet1").Activate kann ich meinen Bedürfnissen anpassen, weil sie selbsterklärend sind. Alles andere brauche ich leider fertig vorgekaut (sorry).
Anzeige
CSV-Export per VBA (bestimmter Bereich)
24.02.2017 11:35:49
Michael
Hi,
ich vermute mal, daß Dein Tabellenblatt anders heißt als "Tabelle2".
Du mußt eigentlich nur CSV_Erzeugen mit den richtigen Parametern aufrufen, wie eben in aufruf() ganz unten.
CSV_Erzeugen ist eine FUNKTION, d.h. sie gibt einen Wert zurück, nämlich "ok", wenn alles glatt ging oder einen Fehlertext. D.h., Du kannst den Rückgabewert in einer msgbox ausgeben (wie im Beispiel) oder zunächst einer Variablen zuweisen:
Ergebnis = CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
und weiterverarbeiten:
If Ergebnis = "ok" Then
' tu dies und das
Else
msgbox Ergebnis
Exit Sub
End If
Beim Aufruf bedeuten die einzelnen Parameter:
CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
Name des Tabellenblatts
Spalten für Export
Pfad incl. Dateiname
Zeilentrennzeichen
Trennzeichen zwischen den Werten

Bei den Spalten für den Export werden NUR die Buchstaben angegeben; das Makro sucht sich dann selbst den Bereich, der Werte enthält, zusammen.
Falls Du damit nicht zurechtkommst, lade bitte mal ne Beispieldatei hoch, dann passe ich's Dir an.
Schöne Grüße,
Michael
Anzeige
AW: CSV-Export per VBA (bestimmter Bereich)
27.02.2017 14:05:44
Hendrik
Hallo Michael,
damit hast du mir wirklich sehr geholfen. Vielen Dank an dieser Stelle. Das Makro arbeitet einwandfrei und ich konnte es im letzten Schritt auch erfolgreich auf meine finalen Bedürfnisse anpassen.
Beste Grüße
Hendrik
In diesem Sinne
/closed
freut mich, gern geschehen,
27.02.2017 16:15:24
Michael
Hendrik,
und vielen Dank für die Rückmeldung!
Beste Grüße zurück,
Michael
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CSV-Export per VBA für einen bestimmten Bereich


Schritt-für-Schritt-Anleitung

Um per VBA einen bestimmten Bereich eines Excel-Blattes in eine CSV-Datei zu exportieren, kannst Du folgendes Makro verwenden. Das folgende Beispiel exportiert die Spalten A bis P und stellt sicher, dass nur Zeilen mit Werten in Spalte A exportiert werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf VBAProject (DeineDateiName) > Einfügen > Modul.
  3. Kopiere und füge den folgenden Code in das Modul ein:
Option Explicit
Function CSV_Erzeugen(blatt As String, Spalten As String, Pfad As String, t1 As String, t2 As String) As String
    Dim aSp As Variant
    Dim z As Long, s As Long, st As String, maxZ As Long
    Dim d As Integer
    On Error GoTo fehler
    With Sheets(blatt)
        aSp = Intersect(.Range(Spalten), .UsedRange)
    End With
    maxZ = UBound(aSp, 1)
    For z = 1 To maxZ
        If aSp(z, 1) <> "" Then
            For s = 1 To UBound(aSp, 2) - 1
                st = st & aSp(z, s) & t2
            Next
            st = st & aSp(z, s) & t1
        End If
    Next
    d = FreeFile
    Open Pfad For Output As #1
    Print #1, st
    Close #1
fehler:
    If Err.Number <> 0 Then CSV_Erzeugen = Err.Description Else CSV_Erzeugen = "ok"
End Function

Sub aufruf()
    Dim Pfad As String, Ergebnis As String
    Pfad = "C:\DeinPfad\DateiName_" & Format(Date, "YYYYMMDD") & "_" & Format(Time, "hhmmss") & ".csv"
    MsgBox CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
End Sub
  1. Ändere in der Zeile Pfad = "C:\DeinPfad\DateiName_" den Pfad zu dem Speicherort, wo du die CSV-Datei ablegen möchtest.
  2. Schließe den VBA-Editor und führe das Makro aus, indem Du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Index außerhalb des gültigen Bereichs"

    • Diese Fehlermeldung tritt auf, wenn der Name des Tabellenblatts (z. B. "Tabelle2") nicht korrekt ist. Stelle sicher, dass der Name exakt mit dem Blatt übereinstimmt, das Du exportieren möchtest.
  • CSV-Datei wird nicht erstellt

    • Überprüfe, ob der angegebene Pfad existiert und ob Du die erforderlichen Berechtigungen zum Schreiben an diesem Ort hast.

Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du die Daten auch manuell als CSV exportieren:

  1. Markiere den gewünschten Bereich in Excel.
  2. Gehe zu Datei > Speichern unter.
  3. Wähle im Dateityp CSV (Comma delimited) (*.csv) und speichere die Datei. Beachte, dass hierbei das Trennzeichen standardmäßig ein Komma ist.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du den Bereich A1:P10 exportieren kannst:

MsgBox CSV_Erzeugen("Tabelle1", "A1:P10", Pfad, vbCrLf, ";")

Dieses Beispiel exportiert nur die Daten im Bereich A1:P10 und verwendet das Semikolon als Trennzeichen.


Tipps für Profis

  • Datenvalidierung: Stelle sicher, dass die zu exportierenden Daten keine unerwarteten leeren Zellen enthalten, um einen sauberen Export zu gewährleisten.
  • Automatisierung: Du kannst das Makro so anpassen, dass es automatisch zu festgelegten Zeiten ausgeführt wird, indem Du es in ein Arbeitsblatt- oder Arbeitsmappenereignis einfügt.

FAQ: Häufige Fragen

1. Wie ändere ich das Trennzeichen? Du kannst das Trennzeichen im Aufruf der Funktion CSV_Erzeugen ändern. Zum Beispiel: CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ",").

2. Kann ich mehrere Tabellenblätter in einer CSV-Datei exportieren? Nein, eine CSV-Datei kann nur Daten aus einem einzigen Tabellenblatt enthalten. Du müsstest für jedes Blatt eine separate CSV-Datei erstellen.

3. Wie kann ich das Makro anpassen, um nur bestimmte Zeilen zu exportieren? Du kannst die If-Bedingung innerhalb der For-Schleife anpassen, um nur bestimmte Zeilen basierend auf Deinen Kriterien zu exportieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige