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

Forumthread: Bestimmte Spalten in csv-Datei schreiben/exportier

Bestimmte Spalten in csv-Datei schreiben/exportier
18.09.2014 10:48:42
Ingo
Hallo
Ich habe eine Excel-Tabelle.
In dieser Tabelle nehme ich immer wieder Änderungen an den Einträgen vor.
Ich möchte gerne ein Makro erstellen, mit dem ich quasi "auf Knopfdruck" die Werte meiner Tabelle in eine csv-Datei schreiben kann.
Dabei soll aber folgendes bedacht werden:
* Trennzeichen soll sein Semikolon
* Nur die Werte bestimmter Spalten sollen in die csv-date geschrieben werden.
* Die entsprechenden Spalten (z.B. B,C,F,K,Y,Z) sollen direkt irgendwo in dem VBA-Script eingetragen werden.
Ich brauche also beim Start des Makros keine Abfragen oder sowas.
Mittels Google-Suche habe ich das folgende Script gefunden:
Sub Produktdatei()
Dim varSpalten
Dim intSpalte As Integer
Dim objQuellblatt As Worksheet
Dim objZielblatt As Worksheet
Dim strPfad As String
'Datenquelle festlegen
Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
'Neues Tabellenblatt zum Auslagern (in Kopie) der zu speichernden Spalten
Set objZielblatt = ThisWorkbook.Worksheets.Add
varSpalten = Array("B", "C", "D", "E", "F", "I", "O", "Y", "Z") 'zu speichernde Spalten in  _
Kopierreihenfolge
For intSpalte = 0 To UBound(varSpalten)
'Zu speichernde Spalten in neues Tabellenblatt kopieren
objQuellblatt.Cells(1, varSpalten(intSpalte)).EntireColumn.Copy _
Destination:=objZielblatt.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
Next 'intSpalte
'Erste Spalte bleibt beim Kopieren leer - löschen
objZielblatt.Columns(1).Delete
'Tabellenblatt mit den zu speichernden Spalten in neue Arbeitsmappe schieben
objZielblatt.Move
'Speicherort abfragen
strPfad = GetOrdner()
'Erzeugte Arbeitsmappe als CSV speichern
ActiveWorkbook.SaveAs strPfad & "\" & "Dateiname.csv", FileFormat:=xlCSV, Local:=True
End Sub

Function GetOrdner(Optional ByVal def = "") As String
Dim objShell As Object
Dim objFolder As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Bitte einen Ordner wählen", 0, def)
If objFolder Is Nothing Then Exit Function
GetOrdner = objFolder.Self.Path
End Function

Wenn ich das nun richtig sehe, geht das Script den Weg über ein zusätzliches Tabellenblatt, in das die gewünschten Spalten kopier und dann erst in die csv-Datei geschrieben werden.
Des Weiteren fragt dieses Script ja noch nach dem Speicherort.
Beides brauche ich eigentlich nicht.
Gibt es nicht ein einfacheres Script, welche nicht dem "Umweg" über ein zusätzilches Tabellenblatt geht?
Über Eur Hilfe würde ich mich wirklich riesig freuen.
Gruß
Ingo

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Spalten in csv-Datei schreiben/exportier
18.09.2014 11:17:45
Rudi
Hallo,
Sub Produktdatei()
Dim varSpalten
Dim intSpalte As Integer, lngZeile As Long
Dim objQuellblatt As Worksheet
Dim objZielblatt As Worksheet
Dim strPfad As String
Dim varTmp, strOut As String
Open "c:\test\dateiname.csv" For Output As #1  'anpassen
'Datenquelle festlegen
Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
varSpalten = Array(2, 3, 4, 5, 6, 9, 15, 25, 26)
varTmp = objQuellblatt.UsedRange
For lngZeile = 1 To UBound(varTmp)
strOut = ""
For intSpalte = 0 To UBound(varSpalten)
strOut = strOut & ";" & varTmp(lngZeile, varSpalten(intSpalte))
Next intSpalte
strOut = Mid(strOut, 2)
Print #1, strOut
Next lngZeile
Close #1
End Sub

Gruß
Rudi

Anzeige
AW: Bestimmte Spalten in csv-Datei schreiben/exportier
18.09.2014 12:09:52
Ingo
Hallo Rudi
Vielen lieben Dank für Deine Hilfe.
Dein Code funktioniert auf Anhieb prima.
Ich freue mich wirklich sehr darüber.
Ein kelines Hoppala habe ich allerdings noch.
In meiner Tabelle sind zur Zeit 601 Zeilen mit Werten gefüllt.
Diese werden auch alle in die csv-Datei geschrieben.
Aber es werden noch weitere ca 90 Zeilen ind die csv-Datei geschrieben.
Diese weiteren 90 Zeilen in der csv-Datei einhalten keine Werte, sondern nur die Trennzeichen (";").
Ich habe die Vermutung, dass es daran liegen könnte, dass ich in 2 Spalten Formeln stehen habe.
Wie kann ich das denn am besten lösen?
Ist folgende Idee sinnvoll?
* Dein Code schreibt nur dann die Werte der entsprechenden Spalten in die csv-Datei, wenn in Spalte B auch jeweils ein Wert steht.
Gruß
Ingo

Anzeige
AW: Bestimmte Spalten in csv-Datei schreiben/exportier
18.09.2014 12:44:17
Rudi
Hallo,
kann man so machen.
Sub Produktdatei()
Dim varSpalten
Dim intSpalte As Integer, lngZeile As Long
Dim objQuellblatt As Worksheet
Dim objZielblatt As Worksheet
Dim strPfad As String
Dim varTmp, strOut As String
Open "c:\test\dateiname.csv" For Output As #1  'anpassen
'Datenquelle festlegen
Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
varSpalten = Array(2, 3, 4, 5, 6, 9, 15, 25, 26)
varTmp = objQuellblatt.UsedRange
For lngZeile = 1 To UBound(varTmp)
strOut = ""
If Len(varTmp(lngZeile, varSpalten(0))) > 0 Then
For intSpalte = 0 To UBound(varSpalten)
strOut = strOut & ";" & varTmp(lngZeile, varSpalten(intSpalte))
Next intSpalte
strOut = Mid(strOut, 2)
Print #1, strOut
End If
Next lngZeile
Close #1
End Sub

Gruß
Rudi

Anzeige
AW: Bestimmte Spalten in csv-Datei schreiben/exportier
18.09.2014 12:54:53
Ingo
Hallo Rudi
Großartig?
Ich bin happy voll und ganz.
Danke!
Gruß
Ingo

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bestimmte Spalten in CSV-Datei exportieren


Schritt-für-Schritt-Anleitung

Um bestimmte Spalten aus einer Excel-Tabelle in eine CSV-Datei zu exportieren, kannst du folgendes VBA-Script verwenden. In diesem Beispiel wird das Semikolon als Trennzeichen verwendet:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Menü Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub Produktdatei()
    Dim varSpalten
    Dim intSpalte As Integer, lngZeile As Long
    Dim objQuellblatt As Worksheet
    Dim strPfad As String
    Dim varTmp, strOut As String

    Open "C:\test\dateiname.csv" For Output As #1  ' Speicherort anpassen
    Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
    varSpalten = Array(2, 3, 4, 5, 6, 9, 15, 25, 26) ' Spaltenindizes anpassen
    varTmp = objQuellblatt.UsedRange

    For lngZeile = 1 To UBound(varTmp)
        strOut = ""
        If Len(varTmp(lngZeile, varSpalten(0))) > 0 Then
            For intSpalte = 0 To UBound(varSpalten)
                strOut = strOut & ";" & varTmp(lngZeile, varSpalten(intSpalte))
            Next intSpalte
            strOut = Mid(strOut, 2) ' Erstes Semikolon entfernen
            Print #1, strOut
        End If
    Next lngZeile
    Close #1
End Sub
  1. Passe den Speicherort C:\test\dateiname.csv und die varSpalten-Array-Werte an deine Bedürfnisse an.
  2. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

  • Leere Zeilen in der CSV-Datei: Wenn du leere Zeilen in der CSV-Datei erhältst, könnte es daran liegen, dass du Formeln in deinen Spalten hast. Stelle sicher, dass nur Zeilen mit Werten exportiert werden. Der obige Code enthält bereits eine Bedingung, die dies berücksichtigt.

  • Falsches Trennzeichen: Wenn das Trennzeichen nicht korrekt ist, überprüfe den Code und stelle sicher, dass du das Semikolon korrekt definiert hast.


Alternative Methoden

Eine Alternative zum VBA-Export ist die Verwendung von Power Query in Excel. Damit kannst du Daten aus einer Tabelle importieren und in eine CSV-Datei exportieren, ohne VBA verwenden zu müssen. Dies ist besonders nützlich, wenn du regelmäßig Daten exportieren musst.


Praktische Beispiele

Wenn du nur die Spalten B, C, F, K, Y und Z exportieren möchtest, ändere das varSpalten-Array entsprechend:

varSpalten = Array(2, 3, 6, 11, 25, 26) ' B, C, F, K, Y, Z

Durch diese Anpassung exportierst du nur die gewünschten Spalten aus deiner Excel-Tabelle.


Tipps für Profis

  • Automatisierung: Du kannst das Makro so anpassen, dass es automatisch beim Öffnen der Datei oder bei bestimmten Ereignissen ausgeführt wird.
  • Dynamische Dateinamen: Du könntest den Dateinamen dynamisch gestalten, um z.B. das aktuelle Datum im Namen zu verwenden. Das erhöht die Nachvollziehbarkeit.

FAQ: Häufige Fragen

1. Wie kann ich das Trennzeichen ändern?
Du kannst das Trennzeichen einfach im Code anpassen, indem du das & ";" & durch das gewünschte Trennzeichen ersetzt.

2. Funktioniert das auch in Excel 365?
Ja, das VBA-Script funktioniert auch in Excel 365. Stelle sicher, dass die Makros in deinen Excel-Einstellungen aktiviert sind.

3. Kann ich das Makro auch für andere Dateien verwenden?
Ja, du kannst den Code anpassen, um Daten aus verschiedenen Arbeitsblättern oder -mappen zu exportieren. Achte darauf, die Namen entsprechend zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige