Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Erstellung .csv ohne Übergabe der leeren Zeilen

Forumthread: Erstellung .csv ohne Übergabe der leeren Zeilen

Erstellung .csv ohne Übergabe der leeren Zeilen
05.06.2009 14:44:18
Klemens
Hallo !
benutze ein Makro, das mir als Ausgabedatei eine .csv Datei erstellt. Die Ausgabe als solches funktioniert.
Allerdings habe ich das Problem dass nicht nur die Zeilen mit Inhalten ausgegeben werden sondern auch diejenigen ohne Inhalte. Die csv.-Datei wird aus einem Arbeitsblatt heraus erzeugt, dass viele Formeln enthält.
Die .csv-Datei sieht z.B. so aus:
2T;20090503;;;P1A_010;010 ;;;;Test 1;;;;;;;312087;
2T;20090504;;;P1A_010;010 ;;;;Test 2;;;;;;;456987;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Zeile 1 und Zeile 2 waren also mit Inhalten gefüllt, Zeile 3 und 4 nicht.
Nun möchte ich dass Zeile 3 und 4 überhaupt nicht mit in die .csv-Datei übernommen werden.
Kann mir jemand helfen ?
Hier noch der Code:

Sub exportiere()
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
'strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
'If strDateiname = "" Then Exit Sub
varRetVal = Application.GetSaveAsFilename( _
InitialFileName:=strInitName, _
FileFilter:="CSV-Dateien (*.csv), *.csv", _
Title:="Daten exportieren in CSV-Datei")
If varRetVal = False Then Exit Sub
strDateiname = varRetVal
LetzteZeile = (Sheets("Ausgabe").Cells(Cells.Rows.count, 4).End(xlUp).Row)
Sheets("Ausgabe").Activate
Set Bereich = ActiveSheet.Range(Cells(6, 3), Cells(LetzteZeile, 64))
' Set Bereich = Sheets("Ausgabe").Range(Cells(6, 3), Cells(1005, 64))
strTrennzeichen = ";"
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
' Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde erfolgreich exportiert nach" & vbCrLf & strDateiname
MsgBox "Die Datei wird automatisch geschlossen!"
Sheets("Eingabe").Activate
Call Inhalte_löschen
directExit = True
Application.DisplayAlerts = False
Application.Quit
End Sub


Danke !
Grüße
Klemens

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erstellung .csv ohne Übergabe der leeren Zeilen
05.06.2009 16:48:57
Luschi
Hallo Klemens,
ich würde es so machen:

If strTemp  ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" Then
Print #1, strTemp
End If

Gruß von Luschi
aus klein-Paris

AW: Erstellung .csv ohne Übergabe der leeren Zeilen
05.06.2009 17:05:41
ransi
HAllo Clemens
Oder ein etwas anderer Ansatz:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub machs()
Dim arr
Dim Out

Dim L As Long
Dim I As Integer
Dim Z As Long
Dim leer As Boolean
Dim MyCSV
Dim FSO
Set FSO = CreateObject("Scripting.filesystemObject")
Set MyCSV = FSO.createtextfile("C:/Temp/MeineCSV.csv", True)
arr = Range("A:Z")
Redim Out(1 To UBound(arr))
For L = 1 To UBound(arr)
    leer = True
    For I = 1 To UBound(arr, 2)
        If arr(L, I) <> "" Then
            leer = False
            Exit For
        End If
    Next
    If leer = False Then
        Z = Z + 1
        Out(Z) = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range("A:Z").Rows(L))), ";")
    End If
Next
With MyCSV
    .writeline Join(Out, vbCrLf)
    .Close
End With
End Sub

ransi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Erstellung einer .csv-Datei ohne leere Zeilen


Schritt-für-Schritt-Anleitung

Um eine .csv-Datei zu erstellen, die keine leeren Zeilen enthält, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xls)" und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das neue Modul:

    Sub exportiere()
       Dim Bereich As Object, Zeile As Object, Zelle As Object
       Dim strTemp As String
       Dim strDateiname As String
       Dim strTrennzeichen As String
       Dim strMappenpfad As String
    
       strMappenpfad = ActiveWorkbook.FullName
       strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
    
       varRetVal = Application.GetSaveAsFilename( _
           InitialFileName:=strMappenpfad, _
           FileFilter:="CSV-Dateien (*.csv), *.csv", _
           Title:="Daten exportieren in CSV-Datei")
       If varRetVal = False Then Exit Sub
       strDateiname = varRetVal
       LetzteZeile = (Sheets("Ausgabe").Cells(Cells.Rows.Count, 4).End(xlUp).Row)
       Sheets("Ausgabe").Activate
       Set Bereich = ActiveSheet.Range(Cells(6, 3), Cells(LetzteZeile, 64))
       strTrennzeichen = ";"
       Open strDateiname For Output As #1
    
       For Each Zeile In Bereich.Rows
           strTemp = ""
           For Each Zelle In Zeile.Cells
               If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
                   strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
               Else
                   strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
               End If
           Next
           If Len(Trim(strTemp)) > 0 Then ' Überprüfen, ob die Zeile nicht leer ist
               If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
               Print #1, strTemp
           End If
       Next
       Close #1
       MsgBox "Datei wurde erfolgreich exportiert nach" & vbCrLf & strDateiname
    End Sub
  4. Führe das Makro aus, indem du F5 drückst oder über das Menü Run > Run Sub/UserForm.


Häufige Fehler und Lösungen

  • Problem: Die .csv-Datei enthält weiterhin leere Zeilen.

    • Lösung: Stelle sicher, dass die Überprüfung auf leere Zeilen im Code korrekt implementiert ist. Verwende die Len(Trim(strTemp)) > 0 Bedingung, um sicherzustellen, dass nur nicht-leere Zeilen exportiert werden.
  • Problem: Die .csv-Datei wird nicht erstellt.

    • Lösung: Überprüfe, ob du die entsprechenden Berechtigungen hast, um eine Datei im angegebenen Verzeichnis zu speichern.

Alternative Methoden

Eine andere Möglichkeit, eine .csv-Datei ohne leere Zeilen zu erstellen, ist die Verwendung von Scripting.FileSystemObject. Hier ist ein Beispiel:

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyCSV = FSO.CreateTextFile("C:/Temp/MeineCSV.csv", True)
' Weitere Logik zum Schreiben der CSV-Datei hier

Diese Methode kann flexibler sein, insbesondere wenn du die Datei an einem bestimmten Ort speichern möchtest.


Praktische Beispiele

Angenommen, du hast folgende Daten in deinem Excel-Arbeitsblatt:

A B C
1 Test
2 Beispiel Text

Nach dem Ausführen des Makros sollte die .csv-Datei wie folgt aussehen:

1;Test;
2;Beispiel;Text;

Alle leeren Zeilen wurden erfolgreich entfernt.


Tipps für Profis

  • Experimentiere mit den Trennzeichen: Statt ; kannst du auch , verwenden, falls du eine Standard-CSV-Datei benötigst.
  • Verwende die csv datei leerzeichen entfernen Funktion, um sicherzustellen, dass auch überflüssige Leerzeichen entfernt werden.
  • Achte darauf, den Dateipfad für die .csv-Datei genau anzugeben, um Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass keine leeren Zeilen in der .csv-Datei vorhanden sind? Verwende die Len(Trim(strTemp)) > 0 Bedingung, um sicherzustellen, dass nur nicht-leere Zeilen exportiert werden.

2. Kann ich das Makro auch für andere Dateiformate verwenden? Ja, du kannst die Logik anpassen, um Daten in verschiedenen Formaten zu exportieren, indem du die Dateiendung und den Exportcode änderst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige