Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV Datei in zweidimensionales Array einlesen

CSV Datei in zweidimensionales Array einlesen
19.04.2018 09:40:54
Wilfried
Hallo,
Die CSV-Datei besteht aus vielen Zeilen, jede Zeile hat 2 Werte, durch Komma getrennt.
Das Einlesen klappt schon mal:
Sub ReadCsvFile()
Dim MapArray()  As Variant
ReDim MapArray(1 To 1)
MyFile = "D:\Data\MyFile.csv"
Delim = ","
Set fso = CreateObject("Scripting.FileSystemObject")
Set Map = fso.OpenTextFile(MyFile)
Do Until Map.AtEndOfStream
x = x + 1
ReDim Preserve MapArray(1 To x)
wholeLine = Map.ReadLine
MapArray(x) = Split(wholeLine, ",")
Loop
DUMMYVALUE = MapArray(1, 1)
End Sub
Ich möchte die so eingelesenen Werte anschließend durchsuchen, d.h. "Spalte 1" einzeln lesend ansprechen. Das versuche ich in der letzten Codezeile und erhalte einen Run-time error 9: subscript out of range.
Bei einzeiligen Arrays hat diese Methode immer funktioniert. Aber jetzt muss ich ein mehrzeiliges csv-File bearbeiten.
Ich sehe selbst, dass beim einlesen ein eindimensionales Array definiert, aber durch Split(...) letztlich auf zwei Dimensionen "aufgeblasen" wird. Das Ergebnis schaut im Watch-Fenster auch ok aus, dennoch geht der Lesezugriff nicht. Was mache ich falsch?
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Datei in zweidimensionales Array einlesen
19.04.2018 09:47:53
Rudi
Hallo,
letztlich auf zwei Dimensionen "aufgeblasen" wird.
Nein!
Es bleibt ein eindimensionales Array, das wiederum eindimensionale Arrays (0 to 1) enthält.
msgbox MapArray(1)(0)
msgbox MapArray(1)(1)
Gruß
Rudi
AW: CSV Datei in zweidimensionales Array einlesen
19.04.2018 10:23:40
Robert
Hallo Wilfried,
hast Du den Import mal auf eine andere Art probiert:
Sub ReadCsvFile()
Dim wbCSV As Workbook
Dim MapArray As Variant
Dim DUMMYVALUE as String
Application.ScreenUpdating = False
Set wbCSV = Workbooks.Open(Filename:="D:\Data\MyFile.csv")
With wbCSV
MapArray = .Sheets(1).UsedRange.Value
.Close
End With
Application.ScreenUpdating = True
DUMMYVALUE = MapArray(1, 1)
End Sub

Gruß
Robert
Anzeige
AW: CSV Datei in zweidimensionales Array einlesen
19.04.2018 13:11:18
Wilfried
@Robert:
Hatte ich noch nicht probiert. Aber mein Code soll letztlich unabhängig von Excel als VB-Code laufen (es sind ja nur Textdateien im Spiel), deshalb fallen mir "Workbook" und "Sheet" gleich unangenehm auf.
AW: CSV Datei in zweidimensionales Array einlesen
19.04.2018 13:07:23
Wilfried
Ups - schon wieder was gelernt.
Funktioniert prächtig. Besten Dank!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

CSV Datei in zweidimensionales Array einlesen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke im Menü auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code zum Einlesen der CSV-Datei einfügen: Füge den folgenden Code in das Modul ein, um die CSV-Datei in ein Array einzulesen:

    Sub ReadCsvFile()
       Dim MapArray() As Variant
       Dim MyFile As String
       Dim Delim As String
       Dim fso As Object
       Dim Map As Object
       Dim x As Long
    
       MyFile = "D:\Data\MyFile.csv"
       Delim = ","
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set Map = fso.OpenTextFile(MyFile)
    
       Do Until Map.AtEndOfStream
           x = x + 1
           ReDim Preserve MapArray(1 To x)
           wholeLine = Map.ReadLine
           MapArray(x) = Split(wholeLine, Delim)
       Loop
    
       ' Beispiel für den Zugriff auf den ersten Wert
       DUMMYVALUE = MapArray(1)(1)
    End Sub
  4. Code ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Führe den Code mit F5 aus.

  5. Zugriff auf die Werte: Um auf die Werte in MapArray zuzugreifen, kannst du den Index verwenden, z.B. MapArray(1)(0) für den ersten Wert der ersten Zeile.


Häufige Fehler und Lösungen

  • Run-time error 9: subscript out of range: Dieser Fehler tritt häufig auf, wenn du versuchst, auf einen Index zuzugreifen, der nicht existiert. Stelle sicher, dass du den richtigen Index verwendest und dass die CSV-Daten korrekt eingelesen wurden.

  • Zugriffsfehler auf mehrdimensionale Arrays: Beachte, dass das MapArray in diesem Beispiel ein eindimensionales Array ist, welches eindimensionale Arrays speichert. Der Zugriff erfolgt daher über zwei Indizes.


Alternative Methoden

Eine alternative Methode, um eine CSV-Datei in ein Array zu laden, ist die Verwendung der Workbook-Objekte in Excel:

Sub ReadCsvFile()
    Dim wbCSV As Workbook
    Dim MapArray As Variant

    Application.ScreenUpdating = False
    Set wbCSV = Workbooks.Open(Filename:="D:\Data\MyFile.csv")

    With wbCSV
        MapArray = .Sheets(1).UsedRange.Value
        .Close
    End With

    Application.ScreenUpdating = True
End Sub

Diese Methode bietet den Vorteil, dass du direkt mit Excel-Daten arbeiten kannst, was besonders nützlich ist, wenn du mit großen CSV-Dateien arbeitest.


Praktische Beispiele

  • CSV-Datei mit zwei Werten pro Zeile: Wenn deine CSV-Datei beispielsweise folgende Struktur hat:

    Wert1,Wert2
    10,20
    30,40

    kannst du mit dem Code die Werte in ein Array laden und wie folgt darauf zugreifen:

    Debug.Print MapArray(1)(1) ' Gibt Wert1 aus
    Debug.Print MapArray(2)(2) ' Gibt Wert2 aus
  • Daten analysieren: Du kannst die Werte im Array nutzen, um Berechnungen oder Analysen durchzuführen, z.B. Summen oder Durchschnitte.


Tipps für Profis

  • Fehlerbehandlung einfügen: Um Laufzeitfehler besser zu handhaben, kannst du On Error Resume Next und On Error GoTo 0 verwenden.

  • Verwendung von Split(): Die Split()-Funktion ist sehr hilfreich, um CSV-Daten in Arrays zu zerteilen. Achte darauf, den richtigen Delimiter zu verwenden.

  • Leistungsoptimierung: Überlege, ob du die Daten direkt aus der CSV-Datei in Excel importieren kannst, anstatt sie in ein Array zu laden, um die Leistung bei großen Datenmengen zu verbessern.


FAQ: Häufige Fragen

1. Kann ich auch andere Dateiformate einlesen?
Ja, du kannst ähnliche Techniken verwenden, um beispielsweise TXT-Dateien zu lesen, achte jedoch auf die spezifischen Delimiter.

2. Wie kann ich die Werte in ein CSV-Format zurückschreiben?
Du kannst das Join()- und Print #-Kommando in VBA verwenden, um die Array-Werte in eine CSV-Datei zu schreiben.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der bereitgestellte VBA-Code sollte in Excel 2007 und neueren Versionen funktionieren. Achte darauf, dass die VBA-Umgebung aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige