Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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!
Anzeige
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!

94 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige