Office: (Office 2016) Makro für csv-Export

Helfe beim Thema Makro für csv-Export in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Tag! Es wäre sehr toll, wenn mir jemand helfen könnte. Der folgende Code macht, was ich bisher wollte: Sub csv_Makro() Dim SrcRg As Range... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von BergRadler, 20. Dezember 2018.

  1. Makro für csv-Export


    Guten Tag!

    Es wäre sehr toll, wenn mir jemand helfen könnte. Der folgende Code macht, was ich bisher wollte:

    Sub csv_Makro()
    Dim SrcRg As Range
    Dim CurrRow As Range
    Dim CurrCell As Range
    Dim CurrTextStr As String
    Dim ListSep As String
    Dim FName As Variant
    FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")

    ListSep = ","
    If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
    Else
    Set SrcRg = ActiveSheet.UsedRange
    End If
    Open FName For Output As #1
    For Each CurrRow In SrcRg.Rows
    CurrTextStr = ìî
    For Each CurrCell In CurrRow.Cells
    CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
    Next
    While Right(CurrTextStr, 1) = ListSep
    CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
    Wend
    Print #1, CurrTextStr
    Next
    Close #1
    End Sub


    Das aktuelle Tabellenblatt wird als csv-Datei abgespeichert.
    Kann mir bitte wer helfen? Ich hätte nun gerne, dass nur der aktuell gefilterte Bereich einer Tabelle - und hier nur die Spalten zB B bis F - exportiert werden.
    Ich schaffe das einfach nicht. :-(

    Danke fürs Nachdenken ...
     
    BergRadler, 20. Dezember 2018
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    ich habe dein Makro dahingehend angepasst, dass es im ausgewählten Zellbereich enthaltene, aber ausgeblendete Zeilen bzw. Spalten nicht in die Datei ausgibt.
    Code:
    Sub csv_Makro()
     Dim SrcRg As Range
     Dim CurrRow As Range
     Dim CurrCell As Range
     Dim CurrTextStr As String
     Dim ListSep As String
     Dim FName As Variant
     
     FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
    
    [COLOR="#0000CD"] ListSep = ","[/COLOR]
     If Selection.Cells.Count > 1 Then
       Set SrcRg = Selection
     Else
       Set SrcRg = ActiveSheet.UsedRange
     End If
     
     Open FName For Output As #1
     For Each CurrRow In SrcRg.Rows
    [COLOR="#FF0000"]   If Not CurrRow.EntireRow.Hidden Then[/COLOR]
          CurrTextStr = ""
          For Each CurrCell In CurrRow.Cells
    [COLOR="#FF0000"]         If Not CurrCell.EntireColumn.Hidden Then[/COLOR]
               CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
    [COLOR="#FF0000"]         End If[/COLOR]
          Next
          While Right(CurrTextStr, 1) = ListSep
             CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
          Wend
          Print #1, CurrTextStr
    [COLOR="#FF0000"]   End If[/COLOR]
     Next
     Close #1
     
    End Sub
    
    Die roten Zeilen habe ich deinem Makro hinzugefügt, um die ausgeblendeten Zeilen und Spalten von der Ausgabe fernzuhalten.
    Die blaue Zeile habe ich so belassen, wie sie war - sie bewirkt, dass als Feldtrennzeichen das Komma verwendet wird - in meinem Excel wird als Trennzeichen der Strichpunkt (Semikolon) verwendet.
     
    Exl121150, 21. Dezember 2018
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi,

    Vorschlag: kopiere die gefilterten Zellen - SpecialCells(xlCellTypeVisible) - in eine neue Arbeitsmappe und speichere diese als CSV-Datei.

    Bis später,
    Karin
     
  4. RobbH Neuer User

    Makro für csv-Export

    Ich bin durch Zufall über diesen Thread "gestolpert". Ich habe das Makro in mein Arbeitsblatt eingefügt und es funktionert fast so wie ich es mir wünsche. Nur benötige ich noch als Abschluss einer Zeile ein ";". Des weiteren würde ich gerne den Speicherort und den Dateinamen vorgeben. Da ich keine Ahnung von VBA habe, wäre ich für eure Hilfe dankbar.
     
  5. Exl121150 Erfahrener User
    Hallo,

    du meinst VBA-Code wie folgt:
    Code:
    Option Explicit
    
    Sub csv_Makro()
     Dim SrcRg As Range
     Dim CurrRow As Range
     Dim CurrCell As Range
     Dim CurrTextStr As String
     Dim ListSep As String
     Dim FName As Variant
     
    [COLOR="#FF0000"]'FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
    'Statt des "Speichern unter"-Dialogs der Vorzeile
    'wird in der Folgezeile ein fester Speicherort gewählt:
     [B]FName = "C:\Excel\csv-Dateien\TestAusgabe.csv"[/B][/COLOR]
    
     ListSep = ","
     If Selection.Cells.Count > 1 Then
       Set SrcRg = Selection
     Else
       Set SrcRg = ActiveSheet.UsedRange
     End If
     
     Open FName For Output As #1
     For Each CurrRow In SrcRg.Rows
       If Not CurrRow.EntireRow.Hidden Then
          CurrTextStr = ""
          For Each CurrCell In CurrRow.Cells
             If Not CurrCell.EntireColumn.Hidden Then
               CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
             End If
          Next
          While Right(CurrTextStr, 1) = ListSep
             CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
          Wend
          Print #1, CurrTextStr[COLOR="#FF0000"][B] & ";"[/B][/COLOR]
       End If
     Next
     Close #1
     
    End Sub
    Die Excel-Daten werden hier nicht in eine frei wählbare CSV-Datei mittels "Speichern unter"-Dialog ausgegeben, sondern in eine Datei mit fix vorgegebenen Pfad und Dateinamen "C:\Excel\csv-Datei\TestAusgabe.csv"
    Weiters wird an jedes Zeilenende der ausgegebenen Textzeilen ein ";" angefügt.

    Die beiden zu ändernden Stellen gegenüber der Vorversion sind rot eingefärbt.
     
    Exl121150, 4. Februar 2019
    #5
  6. RobbH Neuer User
    Vielen Dank für die Hilfe. Hat super funktioniert. Jetzt habe ich noch 2 Kleinigkeiten.
    1. Ich habe mich doch für die "Speichern unter"-Variante aber mit Vorgabe des Speicherortes und des Dateinamens entschieden. Kann man es so programmieren das der Dateiname ohne Dateierweiterung, aber als Dateityp "CSV File (*.csv)" angezeigt wird?

    2. In meiner Datei ist eine Spalte mit Beträgen. Diese Zellen sind formatiert als Zahl mit 1000er-Trennzeichen und 2 Dezimalstellen. Beim Export wird der Betrag 36,00 als 36 abgespeichert. Beim Einlesen der CSV-Datei in eine Datenbank wird der Wert als 0,36 eingelesen, obwohl das Feld als Decimal-Feld formatiert. Wie kann man das so hinbekommen, dass der Betrag beim Export als Decimal-Zahl abgespeichert wird.
     
    Zuletzt von einem Moderator bearbeitet: 30. November 2020
  7. Exl121150 Erfahrener User
    Hallo,

    folgender VBA-Code
    Code:
    Option Explicit
    
    Sub csv_Makro()
     Dim SrcRg As Range
     Dim LfdRow As Range, LfdZelle As Range
     Dim FeldStr As String, ZeileStr As String
     Dim FeldSep As String, ZeileEnd As String
     Dim FName As Variant, DtN As Integer
     
     'Auswahl für die Dateiausgabe: Laufwerk, Pfad, Dateiname, Dateierweitung
     'Auswahlvorgabe: Laufwerk="I:"  Pfad="\Excel\"   Dateiname="TestAusgabe"   Dateierweiterung=".CSV"
     FName = Application.GetSaveAsFilename(InitialFileName:="I:\Excel\TestAusgabe", _
                                           FileFilter:="CSV File (*.csv), *.csv", _
                                           Title:="Speicherung als CSV-Datei")
     'Falls Button 'Abbrechen' gedrückt wurde, wird das Makro beendet
     If FName = False Then Exit Sub
    
     FeldSep = "," 'Trennzeichen zwischen den Feldern innerhalb einer Dateizeile
     ZeileEnd = ";" 'Zeilenendezeichen (mit anschließenden CRLF-Zeichen)
     
     If Selection.Cells.Count > 1 Then
       'Wurde mehr als 1 Zelle ausgewählt, wird diese Zellauswahl ausgegeben
       Set SrcRg = Selection
     Else
       'Ansonsten wird der im Arbeitsblatt genutzte Zellbereich ausgegeben
       Set SrcRg = ActiveSheet.UsedRange
     End If
     
     'Die Datei wird im Modus "Output" mit Dateinummer "DtN" geöffnet
     DtN = FreeFile()
     Open FName For Output As #DtN
     
     'Die Zeilen der Zellauswahl werden als Textzeilen in die Datei ausgegeben:
     'Die Daten ausgeblendeter Zeilen/Spalten werden jedoch nicht ausgegeben.
       '- Zahlen der 2. und 5. Spalte der Auswahl werden als "-1234,56" formatiert (in de-DE bzw. de-AT)
       '- Zahlen der 6. Spalte der Auswahl werden als "-12.34567" formatiert (generell, in voller Länge)
       '- Zahlen der 3. und 4. Spalte der Auswahl werden als "12/31/2018 11:44:33" formatiert
       '- Daten  der 1. und 7. Spalte (und folgende) werden als Text/String formatiert
     For Each LfdRow In SrcRg.Rows
       If Not LfdRow.EntireRow.Hidden Then
          'Nur eingeblendete Zeilen werden ausgegeben - Zeilenanfang:
          ZeileStr = ""
          For Each LfdZelle In LfdRow.Cells
             With LfdZelle
                If Not .EntireColumn.Hidden Then
                  'Nur eingeblendete Spalten werden ausgegeben - Feldausgabe (Format hängt von Spalte ab):
                  Select Case .Column
                    Case 2, 5:    FeldStr = Format(.Value, "0.00")
                    Case 6:       FeldStr = Str(.Value)
                    Case 3 To 4:  FeldStr = Format(.Value, "MM\/DD\/YYYY hh:mm:ss")
                    Case Else:    FeldStr = CStr(.Value)
                  End Select
                  'Feld wird, eingeschlossen in "...", an Zeile angefügt, gefolgt vom Feldtrennzeichen
                  ZeileStr = ZeileStr & Chr(34) & FeldStr & Chr(34) & FeldSep
                End If
             End With
          Next LfdZelle
          'Am Zeilenende vorhandene Feldtrennzeichen werden aus der Zeile entfernt
          While Right(ZeileStr, 1) = FeldSep
             ZeileStr = Left(ZeileStr, Len(ZeileStr) - 1)
          Wend
          'Die Zeile samt Zeilenendezeiche (und anschließendem CRLF) wird in die Datei ausgegeben.
          Print #DtN, ZeileStr & ZeileEnd
       End If
     Next LfdRow
     'Die (CSV-)Datei wird geschlossen:
     Close #DtN
     
    End Sub
    erzeugt bei folgender Datenauswahl:
    3,5 | 99,5 | 2540 | -3,5 | -44,5 | 444 | Robin
    folgende CSV-Textzeile in der Datei:
    "3,50","04/08/1900 12:00:00","12/14/1906 00:00:00","-3,50","-44.5","444","Robin";
    Vorausgesetzt wurde dabei das Sprachgebiet "de-AT", was in diesem Fall mit "de-DE" identisch sein dürfte.

    Bei der Anzeige des "Speichern unter"-Dateidialogs mit Titel "Speicherung als CSV-Datei" wird zu Beginn die Datei "TestAuswahl.csv" mit Dateityp ".CSV" im Verzeichnis "I:\Excel" vorgeschlagen, die sodann entsprechend abgeändert werden kann ("Speichern"-Button).
    Wird "Abbrechen"-Button gedrückt, wird das Makro sofort nach Schließen des Dateidialogs verlassen.

    Ich habe reichlich Kommentar eingefügt, sodass das Makro verständlich sein sollte.
     
    Exl121150, 5. Februar 2019
    #7
  8. RobbH Neuer User

    Makro für csv-Export

    Vielen Dank für die Hilfe. Aber die 1. Variante gefällt mir besser und ist flexibler, da man die Felder nicht vorher festlegen muss. Ich werde jetzt den Betrag mit 100 multiplizieren. Dann wird er nach dem Einlesen automatisch richtig angezeigt.
     
Thema:

Makro für csv-Export

Die Seite wird geladen...
  1. Makro für csv-Export - Similar Threads - Makro csv Export

  2. Makros für csv-Export mit Anführungszeichen für ausgewählte Splaten

    in Microsoft Excel Hilfe
    Makros für csv-Export mit Anführungszeichen für ausgewählte Splaten: Hallo liebe Forengemeinde, ich habe folgendes Problem: Ich muss eine csv-Datei bearbeiten und anschließend wieder als csv-Datei speichern. In der Originaldatei sind einige Spalteninhalte in in...
  3. Makro Probleme CSV Format

    in Microsoft Excel Hilfe
    Makro Probleme CSV Format: Hallo, ich habe mir von jemanden eine Excel Datei überarbeiten lassen, damit zukünftig per Makro gewisse Arbeitsblätter direkt als CSV.-Datei abgespeichert werden können. Leider akzeptiert das...
  4. CSV-Daten per Makro einbinden - manuelle Wahl der Quelldatei

    in Microsoft Excel Hilfe
    CSV-Daten per Makro einbinden - manuelle Wahl der Quelldatei: Liebe Excel-Gemeinde, ich möchte CSV-Daten in eine bereits geöffnete Arbeitsmappe laden. Sie sollen nach jedem Laden eines Datensatzes auf einem anderen Arbeitsblatt dargestellt werden, das den...
  5. VBA Makro einfügen CSV, verarbeiten und abspeichern

    in Microsoft Excel Hilfe
    VBA Makro einfügen CSV, verarbeiten und abspeichern: Hallo zusammen, erstmal vorab meine VBA Kenntnisse sind sehr rudimentär. Aufgabenstellung in Kurz: Ich hab 2 Dateien, eine Hauptdatei (IDXXXX_8x8_GV-contrast.xlsm) und eine CSV die...
  6. per Makro VBA csv durchsuchen und Tabellen anlegen

    in Microsoft Excel Hilfe
    per Makro VBA csv durchsuchen und Tabellen anlegen: Hallo Liebes MS Office Forum Gemeinde, vor ab finde ich super das es eine Plattform gibt um mit anderen Personen Themen über MS Office Probleme, Lösungen Ansätze zu teilen. VBA ist für mich...
  7. Dateiname in Zellen abspeichern, automatisiert

    in Microsoft Excel Hilfe
    Dateiname in Zellen abspeichern, automatisiert: Schönen guten Tag, ich habe aus einer Messreihe mehrere CSV-Dateien erzeugt, die folgende Struktur besitzen, siehe Ausschnitt: [ATTACH] Die ersten vier Spalten sind jeweils mit Werten gefüllt...
  8. Makro - externe Daten verarbeiten - Datei (csv) öffnen

    in Microsoft Excel Hilfe
    Makro - externe Daten verarbeiten - Datei (csv) öffnen: Hallo, ich fange gerade an mit Makros zu arbeiten und komme nun leider nicht weiter. Die Suche der bestehenden Threads hat zwar bereits einen Lösungsansatz geliefert - ich bekomme es leider...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden