[Visual Basic] CSV/TXT Datei in Excel einlesen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von liftishifty, 21. Februar 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 21. Februar 2012
    CSV/TXT Datei in Excel einlesen

    Huhu,

    folgendes:

    Ich habe einen Ordner in dem sich eine CSV datei befindet,dessen daten durch ";" getrennt sind.

    Nun habe ich eine Excel Datei, in die ich per Makro diese Daten täglich in "Tabelle1" einlesen möchte.
    Diese CSV Datei soll sich täglich automatisch um neue Daten ergänzen.
    Diese Daten möchte ich halt in meine Excel-Tabelle ANHÄNGEN...also nicht ersetzen sondern zu den Daten die schon drin sind hinzufügen.
    Kurz und Knapp:

    Ich lese HEUTE die CSV Datei mit den Daten
    31045445;12485;24445
    in die Excel datei ein.

    Morgen möchte ich die Datei erneut hinzufügen da sich die Daten geändert haben in: 31077877;12490;56555

    In Der Excel Tabelle bzw in meiner Makro-Datei sollte dann stehen:
    31045445;12485;24445
    31077877;12490;56555

    So geht das dann täglich weiter.

    Wie ich eine Datei einlese weiss ich bereits aber ich habe das Problem, dass die Daten immer in die erste Spalte geschrieben werden und nicht aufgeteilt. Also :
    31045445 in Spalte 1
    12485 in Spalte 2 u.s.w.

    Außerdem werden die Daten jedesmal ersetzt und nicht hinzugefügt.

    Ich Poste euch mal meinen Code und hoffe dass jemand von euch Ahnung davon hat.

    BW is natürlich klar. Danke!

    P.S in diesem Code wähle ich die Datei selber aus die Eingelesen werden soll also nicht wundern. Normalerweise hat die CSV einen festen Phat und Namen aber das ändere ich später selber ab


    Option Explicit

    Sub ImportCSV()
    Dim Dateiname
    Dim Ws As Worksheet
    Set Ws = ActiveWorkbook.Sheets("Tabelle1")
    Dateiname = Application.GetOpenFilename("Textdateien,*.txt")
    If Dateiname <> False Then
    Application.ScreenUpdating = False
    Workbooks.Open Dateiname
    ActiveSheet.UsedRange.Copy Ws.Cells(1)
    ActiveWorkbook.Close
    Application.ScreenUpdating = True
    End If
    End Sub


    // edit Super wäre übrigens wenn die Zeile nicht eingelesen wird sobald ein Datensatz schon vorhanden ist.
    Dabei würde das Kriterium der ersten Spalte reichen also nach dem Motto:

    Wenn die Zeile mit dem Inhalt in Spalte 1 :31077877 schon vorhanden dann überspringe diese Zeile.
    Das ist allerdings nicht so wichtig. Filtern kann man das ganze auch im Nachhinein noch aber eventuell gibt es ja die Möglichkeit diese Redundanz beim Einlesen schon zu vermeiden^^
     
  2. 21. Februar 2012
    AW: CSV/TXT Datei in Excel einlesen

    Ich weiß nicht genau wie das bei Excel abläuft, aber du kannst doch eigentlich die Datei einlesen und dann nen Counter mitlaufen lassen den du für jede Zeile erhöhst. Diesen Counter schreibst du mit in eine Datei oder in eine nicht sichtbare Zelle. Diese nimmst du dann beim Einlesen als Startwert und liest dann ab der Zahl ein. Weiß nicht genau ob das so funktioniert, aber immer hin eine Idee..
     
  3. 21. Februar 2012
    AW: CSV/TXT Datei in Excel einlesen

    Also mit folgender Änderung bekomme ich es zumindest schonmal so hin , dass die daten alle so wie so sollen untereinander Kopiert werden:

    Sub ImportCSV()
    Dim Dateiname
    Dim Ws As Worksheet
    Dim zeile
    Set Ws = ActiveWorkbook.Sheets("Tabelle1")
    Dateiname = Application.GetOpenFilename("Textdateien,*.csv")

    If Dateiname <> False Then
    Application.ScreenUpdating = False
    Workbooks.Open Dateiname

    zeile = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.UsedRange.Copy Ws.Cells(zeile, 1)

    ActiveWorkbook.Close
    Application.ScreenUpdating = True
    End If
    End Sub




    Allerdings schreibt er die daten aufgrund folgender Zeile:
    (zeile, 1)

    immer in die erste Spalte und nicht so wie es sich gehört, jedes Element getrennt durch Semicolon, in eine eigene Spalte.

    Wenn da jemand ne Lösung weiss ist mir schon geholfen
    Aber danke an CS-Luckor!
     
  4. 21. Februar 2012
    AW: CSV/TXT Datei in Excel einlesen

    Naja du musst auch den Input splitten. Du sagst ihm ja nur das er die den Zeileninhalt in die Zeile schreiben soll. Du musst arr() = Split(zeile, ";") benutzen und dann iterieren und Spalte für Spalte befüllen bis das Ende erreicht ist, dann erhöhst du den Zeilenzähler um 1 und wiederholst den Vorgang..
     
  5. 21. Februar 2012
    AW: CSV/TXT Datei in Excel einlesen

    Habs noch ein wenig einfacher hinbekommen

    So wie es jetzt ist funktioniert es einwandfrei mit .txt Datein. Wähle ich aber als Format im Code .csv und öffne eine .csv Datei, dann schreibt er zwar alles passend untereinander aber wieder alles in die erste Spalte...hmm woran kann sowas liegen?

    Option Explicit

    Sub ImportCSV()
    Dim Dateiname
    Dim Ws As Worksheet
    Dim zeile
    Set Ws = ActiveWorkbook.Sheets("Tabelle1")
    Dateiname = Application.GetOpenFilename("Textdateien,*.csv") ' <- Klappt mit .txt
    und textdokumenten
    aber nicht mit .csv


    If Dateiname <> False Then
    Application.ScreenUpdating = False


    If Ws.Cells(1, 1) = "" Then

    zeile = Ws.Cells(Rows.Count, 1).End(xlUp).Row

    Else
    zeile = Ws.Cells(Rows.Count, 1).End(xlUp).Row + 1

    End If


    Workbooks.OpenText Filename:=Dateiname, DataType:=xlDelimited, Semicolon:=True



    ActiveSheet.UsedRange.Copy

    With ThisWorkbook.Worksheets("Tabelle1")
    .Range("A" & zeile).PasteSpecial Paste:=xlPasteAll
    End With


    ActiveWorkbook.Close
    Application.ScreenUpdating = True
    End If
    End Sub
     
  6. 22. Februar 2012
    AW: CSV/TXT Datei in Excel einlesen

    Okay habs jetzt selber komplett hinbekommen auch mit CSV Datein

    für diejenigen die es interessiert kann man einfach ganz zum Schluss unterm End if noch folgende 2 Zeilen einfügen:

    Selection.TextToColumns Destination:=Ws.Range("A" & zeile), DataType:=xlDelimited, _
    Semicolon:=True

    -----CLOSED-----
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.