EXCEL VBA ADO nach Semikolon separieren
Schritt-für-Schritt-Anleitung
Um Daten aus einer CSV-Datei, die durch Semikolons getrennt sind, in Excel zu importieren, kannst du den folgenden VBA-Code verwenden. Dieser Code nutzt ADO, um die Daten ohne das Öffnen der Datei zu kopieren.
Sub GetDatafromCSV()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim FileName As String
Set cn = New ADODB.Connection
cn.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.16.0;" & _
"Data Source=" & GetLocalPath(ThisWorkbook.Path) & "\;" & _
"Extended Properties='text;HDR=YES;FMT=Delimited('';'')'"
cn.Open
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn
rs.Source = "SELECT * FROM [Test.csv]"
rs.Open
Tabelle2.Range("A21").CopyFromRecordset rs
rs.Close
cn.Close
End Sub
Stelle sicher, dass du die Extended Properties so anpasst, dass das Semikolon als Trennzeichen verwendet wird (FMT=Delimited(';')). Wenn du Probleme hast, könnte es daran liegen, dass Excel standardmäßig Kommas als Trennzeichen verwendet.
Häufige Fehler und Lösungen
-
Fehler: Daten landen in der falschen Spalte
- Lösung: Überprüfe, ob die
Extended Properties korrekt auf Semikolon gesetzt sind. Verwende FMT=Delimited(';').
-
Fehler: Verbindung kann nicht hergestellt werden
- Lösung: Stelle sicher, dass der Microsoft.ACE.OLEDB.16.0 Provider korrekt installiert ist. Möglicherweise musst du eine 32-Bit-Version von Excel auf einem 64-Bit-Betriebssystem verwenden.
-
Fehler: Keine Daten angezeigt
- Lösung: Prüfe die Datei
Schema.ini. Diese Datei sollte im gleichen Verzeichnis wie die CSV-Datei liegen und die erforderlichen Einstellungen enthalten.
Alternative Methoden
Wenn die ADO-Methode nicht funktioniert oder du eine andere Möglichkeit bevorzugst, kannst du auch die folgende VBA-Lösung ausprobieren, die auf der Standard-Dateioperation basiert:
Sub CSV_Import()
Dim vROH, arrDaten() As Variant, vTMP As String
Dim i As Long, j As Long, iMAX As Long
Const cstrDELIM As String = ";" ' Trennzeichen
Open "c:\test.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, vTMP
If Len(vTMP) Then
vROH = vROH & vbCrLf & vTMP
End If
iMAX = Application.Max(iMAX, UBound(Split(vTMP, cstrDELIM)))
Loop
Close #1
vROH = Mid(vROH, 2)
vROH = Split(vROH, vbCrLf)
ReDim arrDaten(UBound(vROH), iMAX)
For i = LBound(vROH) To UBound(vROH)
vTMP = Split(vROH(i), cstrDELIM)
For j = LBound(vTMP) To UBound(vTMP)
arrDaten(i, j) = vTMP(j)
Next j
Next i
Worksheets.Add.Cells(1, 1).Resize(UBound(arrDaten) + 1, UBound(arrDaten, 2) + 1) = arrDaten
End Sub
Diese Methode verwendet die Line Input-Anweisung, um Daten aus der CSV-Datei zu lesen und sie in ein Array zu speichern.
Praktische Beispiele
-
Importiere eine CSV-Datei mit Semikolon-Trennzeichen:
- Benutze die erste Methode, um Daten aus
data.csv zu importieren, indem du den Dateipfad entsprechend anpasst.
-
Speichern als CSV mit Semikolon:
- Wenn du Daten in einem bestimmten Format speichern möchtest, kannst du den folgenden Code verwenden:
Sub SaveAsCSV()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Tabelle1")
ws.SaveAs Filename:="C:\output.csv", FileFormat:=xlCSV, CreateBackup:=False
End Sub
Achte darauf, dass Excel standardmäßig Kommas verwendet. Du musst möglicherweise die CSV-Datei nach dem Speichern in einem Texteditor öffnen und die Kommas durch Semikolons ersetzen.
Tipps für Profis
- Beachte die Version: Stelle sicher, dass du die richtige ADO-Version (32-Bit oder 64-Bit) verwendest, abhängig von deiner Excel-Version.
- Verwende Fehlerbehandlung: Implementiere
On Error Resume Next und On Error GoTo 0, um potenzielle Fehler in deinem Code abzufangen und zu behandeln.
- Vermeide harte Kodierung von Dateipfaden: Verwende Dialogfelder, um den Benutzer nach dem Dateipfad zu fragen, anstatt ihn fest im Code zu verankern.
FAQ: Häufige Fragen
1. Wie kann ich die Verbindung zur CSV-Datei überprüfen?
Du kannst die Verbindung testen, indem du den Code Schritt für Schritt durchführst und nach der cn.Open-Anweisung überprüfst, ob ein Fehler auftritt.
2. Was ist der Unterschied zwischen ADO und dem direkten Import?
ADO ermöglicht eine flexiblere Handhabung von Datenquellen und kann große Datenmengen effizienter verarbeiten als direktes Kopieren durch Zeilen. Es ist besonders nützlich, wenn du Daten aus verschiedenen Quellen kombinieren möchtest.