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

Forumthread: Dezimalzeichen beim Einlesen von CSV

Dezimalzeichen beim Einlesen von CSV
05.01.2023 14:02:47
CSV
Hallo zusammen,
ich habe mich jetzt durch viele Foren gelesen, aber keine passende Lösung gefunden.
Gerne würde ich eine CSV-Datei mittels VBA einlesen. Das Dezimaltrennzeichen in der CSV-Datei ist leider ein Punkt, anstatt ein Komma.
Weiß jemand wie man das beim Einlesen mittels VBA ändern kann? Mittels "Use Text Import Wizard" ist das ja manuell machbar, leider schreibt der Rekorder das aber nicht mit.
Folgenden Code habe ich zum Einlesen gefunden:

Sub CSV_Einfügen()
Dim Datei As String
ChDrive Left(ThisWorkbook.FullName, 1)
ChDir ThisWorkbook.Path
Datei = Application.GetOpenFilename("CSV, *.csv")
If Not LCase(Datei) Like "*.csv" Then Exit Sub
With Workbooks.Open(Datei, ReadOnly:=True, local:=True)
.Sheets(1).UsedRange.Copy _
ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Cells(1, 1)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = .Sheets(1).Name
.Close False
End With
End Sub
Danke für Eure Hilfe!
Viele Grüße
Martin
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dezimalzeichen beim Einlesen von CSV
05.01.2023 14:24:38
CSV
Hallo Martin,
in den "Optionen", "erweitert" gibt es den Punkt "Trennzeichen vom Betriebsystem übernehmen". Den Haken raus und ein Punkt als Dezimal- und ein Komma als Tausendertrennzeichen einstellen, dann Datei öffnen, dann wieder Haken beim "Trennzeichen vom Betriebsystem übernehmen" rein.
Wenn man die Optionen unter laufenden Makrorekorder macht, bekommt ca. folgende Code:

Sub AufKommas_setzen()
'Bzw. basierend auf Betreibssystemsprache
Application.UseSystemSeparators = True
End Sub
Sub AufPunkte_setzen()
With Application
.UseSystemSeparators = False
.DecimalSeparator = "."
.ThousandsSeparator = ","
End With
End Sub
VG
Yal
Anzeige
AW: Dezimalzeichen beim Einlesen von CSV
05.01.2023 14:33:46
CSV
Hallo Yal,
super work around!
Danke!
Martin
Es ist kein Workaround,
05.01.2023 14:48:34
Yal
sondern der einzige vernünftige Weg, wenn man die Datei "öffnet".
Alternativ wäre die Datei zu "lesen", also Zeile für Zeile, wie Andreas_ausWuppertal es vorgezeigt hat. Es ist in manchmal nicht vermeidbar, aber in deinem Fall schon.
Andere Alternativ: die Datei über Power Query zu "importieren": Menü "Daten", "neue Abfrage", "aud Datei", "aus CSV".
Bei Neugierigkeit: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert
VG
Yal
Anzeige
Doch, es ist ein Workaround
05.01.2023 17:02:36
Daniel
Weil man Einstellungen ändert und dabei sicherstellen sollte, dass diese bei Ende des Makros genauso sind wie vorher.
Der vernünftige Weg wäre Worbooks.OpenText, bei welchem die ganzen Einstellungen analog Text-In- Spalten angeben kann:
https://learn.microsoft.com/de-de/office/vba/api/excel.workbooks.opentext
Gruß Daniel
Anzeige
Man lernt ja nie aus.
05.01.2023 19:16:29
Yal
OpenText hatte ich nicht auf dem Schirm, bzw noch nie benutzt, weil mir noch nicht bekannt.
Heute ein Stück Wissen reicher. Danke dafür.
VG
Yal
AW: Man lernt ja nie aus.
06.01.2023 07:58:31
Martin
Danke nochmal an alle! Drei sehr hilfreiche Tipps!
AW: Dezimalzeichen beim Einlesen von CSV
05.01.2023 14:30:18
CSV
Hallo Martin,
so z.B. ginge es auch:

Sub csv2Sheet()
'csv wird eingelesen und ins Tabellenblatt geschrieben
Dim iRow As Long
Dim i As Integer
Dim sPatAndFile As String
Dim sZeile As String
Dim sTrenner As String
Dim arrTemp() As String
sPatAndFile = "C:\testbed\meineCSV.csv"
sTrenner = "."
Open sPatAndFile For Input As #1
iRow = 0
'csv Zeile für Zeile durchlaufen
Do While Not EOF(1)
iRow = iRow + 1
Line Input #1, sZeile 'Zeile einlesen
arrTemp = Split(sZeile, sTrenner) 'Zeile splitten
For i = 0 To UBound(arrTemp) 'array der splits ins Tabellenblatt schreiben
Cells(iRow, 1).Offset(0, i).Value = arrTemp(i)
Next i
Loop
Close
MsgBox "Fertig", vbInformation
End Sub
Viele Grüße und einen schönen Tag,
Andreas_ausWuppertal
andy027@gmx.de
Anzeige
AW: Dezimalzeichen beim Einlesen von CSV
05.01.2023 14:39:26
CSV
Danke Andreas!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dezimalzeichen beim Einlesen von CSV ändern


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei mit einem Punkt als Dezimaltrennzeichen in Excel zu importieren, kannst du folgende Schritte befolgen:

  1. Öffne Excel und gehe zu den Optionen.
  2. Wähle den Reiter Erweitert und suche die Option Trennzeichen vom Betriebssystem übernehmen. Entferne den Haken.
  3. Setze den Punkt als Dezimaltrennzeichen und das Komma als Tausendertrennzeichen.
  4. Öffne die CSV-Datei, die du importieren möchtest.
  5. Setze den Haken bei Trennzeichen vom Betriebssystem übernehmen wieder rein.

Falls du den Import mit VBA automatisieren möchtest, kannst du den folgenden Code verwenden:

Sub CSV_Einfügen()
    Dim Datei As String
    ChDrive Left(ThisWorkbook.FullName, 1)
    ChDir ThisWorkbook.Path
    Datei = Application.GetOpenFilename("CSV, *.csv")
    If Not LCase(Datei) Like "*.csv" Then Exit Sub
    With Workbooks.Open(Datei, ReadOnly:=True, local:=True)
        .Sheets(1).UsedRange.Copy _
        ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Cells(1, 1)
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = .Sheets(1).Name
        .Close False
    End With
End Sub

Häufige Fehler und Lösungen

  • Problem: Die Zahlen werden falsch formatiert (z.B. als Text).

    • Lösung: Stelle sicher, dass du die Excel-Optionen korrekt eingestellt hast und das richtige Dezimaltrennzeichen verwendest.
  • Problem: Die Datei öffnet sich nicht richtig.

    • Lösung: Überprüfe den Dateipfad und stelle sicher, dass die Datei im richtigen Format gespeichert ist (z.B. .csv).
  • Problem: Die deutschen Dezimaltrennzeichen werden nicht korrekt angezeigt.

    • Lösung: Ändere die Systemeinstellungen in Excel, um das Dezimaltrennzeichen zu ändern. Du kannst auch den VBA-Code anpassen, um das Trennzeichen direkt beim Einlesen zu setzen.

Alternative Methoden

  1. Power Query verwenden: Du kannst die CSV-Datei auch über Power Query importieren. Gehe dazu zu DatenNeue AbfrageAus DateiAus CSV. Hier kannst du das Dezimaltrennzeichen direkt in den Abfrageoptionen anpassen.

  2. OpenText-Methode in VBA: Anstatt die Datei direkt zu öffnen, kannst du die Workbooks.OpenText-Methode verwenden, um spezifische Importoptionen wie das Dezimaltrennzeichen festzulegen:

Workbooks.OpenText Filename:=Datei, DataType:=xlDelimited, DecimalSeparator:=".", ThousandsSeparator:=","

Praktische Beispiele

Hier sind einige nützliche Beispiele für den Import von CSV-Dateien:

  1. CSV mit Punkt statt Komma: Wenn deine Datei Punkte als Dezimaltrennzeichen verwendet, kannst du den folgenden VBA-Code verwenden:
Sub csv2Sheet()
    Dim iRow As Long
    Dim i As Integer
    Dim sPatAndFile As String
    Dim sZeile As String
    Dim sTrenner As String
    Dim arrTemp() As String
    sPatAndFile = "C:\testbed\meineCSV.csv"
    sTrenner = "."
    Open sPatAndFile For Input As #1
    iRow = 0
    Do While Not EOF(1)
        iRow = iRow + 1
        Line Input #1, sZeile
        arrTemp = Split(sZeile, sTrenner)
        For i = 0 To UBound(arrTemp)
            Cells(iRow, 1).Offset(0, i).Value = arrTemp(i)
        Next i
    Loop
    Close
    MsgBox "Fertig", vbInformation
End Sub
  1. CSV mit Kommas: Wenn deine Datei bereits Kommas als Trennzeichen verwendet, musst du nur den sTrenner entsprechend anpassen.

Tipps für Profis

  • Achte darauf, dass bei der Verwendung von VBA alle Einstellungen nach dem Import wieder auf die ursprünglichen Werte zurückgesetzt werden, um unerwartete Änderungen in anderen Dateien zu vermeiden.
  • Nutze die Application.UseSystemSeparators-Eigenschaft, um das Dezimaltrennzeichen temporär zu ändern, ohne die globalen Einstellungen zu beeinflussen.
  • Experimentiere mit Power Query, es bietet viele flexible Möglichkeiten, um CSV-Daten zu transformieren und zu importieren.

FAQ: Häufige Fragen

1. Kann ich das Dezimaltrennzeichen nur für eine Datei ändern?
Ja, du kannst die Einstellungen in Excel temporär ändern oder die OpenText-Methode in VBA verwenden, um spezifische Einstellungen nur für den Import der aktuellen Datei anzuwenden.

2. Was tun, wenn die CSV-Datei nicht im richtigen Format geöffnet wird?
Überprüfe die Dateieinstellungen und stelle sicher, dass die Trennzeichen korrekt gesetzt sind. Du kannst auch versuchen, die Datei in einem Texteditor zu öffnen, um die Formatierung zu überprüfen.

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