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

Forumthread: csv Datei öffnen und dabei drei Spalten gleich als

csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 13:51:54
Torsten
Hallo zusammen,
ich habe gerade erst angefangen mich mit VBA zu beschäftigen und beiße mir an einen Problem die Zähne aus.
Ich habe csv Dateien der Pfad und der Name der Datei sind immer unterschiedlich.
Diese möchte ich über ein Macro öffen und dabei drei nebeneinanderliegende Spalten AL:AN gleich als Text formartiert öffnen. Die Tabelle hat ingesamt Spalten bis DA.
Dort sind Zahlen mit führenden Nullen enthalten, welche sonst durch Excel verschwinden würden. Alle anderten Spaleten sind mit Standard io.
Einiges habe ich bereits ausprobiert aber es hat bislang nicht hingehauen, auch eine Aufzeichnung über den Macro Recorder bringt mich nicht vorran, da die cvs so eingestellt ist das sie gleich mit Excel geöffnet wird, kommt gar nicht erst der TextKonvertierungs-Assistent.
Wenn ich die Endung wegnehme kommt dieser zwar aber was da aufgezeichnet wird ist ziemlich wild und hilft mir auch bei wechselden Dateinamen und Pfaden nicht wirklich.
Hat jemand einen Tip für mich.
Vielen Dank.

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 14:05:09
Daniel
Hi
du könntest die Datei mit OpenText öffnen.
nach OpenText kannst du selben Parameter angeben wie beim Textimport und somit über die FieldInfo festlegen, dass bestimmte Spalten als Text importiert werden.
Gruß Daniel

AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 14:07:37
Oberschlumpf
Hi Torsten
der VBA-Befehl
Range("AL:AN").NumberFormat = "000000"

formatiert die Spalten - nicht - als Text, sondern so, dass bis 5-stellige Zahlen noch immer mit 1 führenden 0 angezeigt werden.
Wenn in deinen csv-Dateien Zahlen mit mehr als 6 Stellen für die Spalten AL:AN vorkommen, musst du die Anzahl im obigen Befehl nur entsprechend vergrößern....oder verringern, wenn schon 6 Nullen zu viel sind.
Ein wenig "problematisch", weil nach meiner Meinung "unsauber" programmiert, finde ich, dass der Befehl wirklich die - vollständigen - Spalten AL:AN formatiert.
"Sauberer" fänd ich
Range("AL1:ANx").NumberFormat = "000000"

wobei anstelle von x die letzte, benutzte Zeile in Spalte AN steht.
Du könntest also zuerst die csv-Datei einlesen.
Dann kannst du mit VBA auslesen, welche denn die letzte, benutzte Zeile in Spalte AN ist, und so kannst du dann den von mir vorgeschlagenen Formatier-Befehl anpassen.
Hilfts denn?
Ciao
auch Thorsten...aber mit H :-)

Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 15:10:33
Torsten
Hallo Thorsten,
danke für die Antwort, ok die ganze Spalte das sollte man auf jeden Fall nur bis zur letzten benutzen machen :-), wobei ich eher von unten anfangen muß da auch Leerzeilen enthalten sein können.
Was nun Dein Vorschlag angeht, momentan lasse ich ein Makro laufen was diese Spalten (nur die gefüllten) als Zahl formartiert.
Die Problematik ist das Dein Vorschlagh nur nei einer der Spalten funktionieren würde, denn dort weiß ich das der Wert immer 13 Stellen haben muß.
Bei der Spalte davor kann er aber unterschiedlich sein und wenn die Null erst mal nach dem öffnen weg ist, habe ich schon das Problem. Bei der dritten Spalte verhält es sich so das ein, zwei oder mehrer Zahlen neben einander stehen durch Leerzeichen getrennt.
Alle bei denen meherer Werte stehen werden von Excel ja eh als Text interpretiert, nur die wo eine steht halt nicht. Ich bin mir nicht sicher ob Dein Vorschlag dort auch greifen würde.
Das meiste Problem habe ich jedoch mit der Spalte in der ich vorher nicht weiß wie lang ggf. die Zahlen mit Nullen sind.

Anzeige
besser könnten - wir - helfen...
21.02.2016 15:26:10
Oberschlumpf
...wenn - du -
Torsten
uns mal ne Bsp-Txt-Datei zeigst.
Ciao
Thorsten

AW: besser könnten - wir - helfen...
21.02.2016 15:45:34
Torsten
Das kann ich wohl tun, leider nur als txt nicht als csv. Es geht um die Spalten AL:AN.
Ich habe es auch schon mal geschafft das die Spalten als Textformatiert angezeigt wurden, die eigentliche Zahl jedoch wie Excel üblich :-(( zusammengeschoben mit diesem nettem Plus, was mir auch nichtz hilft.
https://www.herber.de/bbs/user/103756.txt

Anzeige
AW: besser könnten - wir - helfen...
21.02.2016 16:22:00
Daniel
Hi
öffne die Datei aus einer bestehenden Datei heraus mit DATEN - EXTERNE DATEN - AUS TEXT
dort erscheint dann der Assistent wie bei TEXT IN SPALTEN und du kannst festlegen, Welche Spalten als Zahl und welche als Text importiert werden sollen.
Gruß Daniel

AW: besser könnten - wir - helfen...
21.02.2016 16:36:28
Torsten
HI Daniel,
danke für die Info.
Wie ich den Assistenten aufgerufen bekomme weiß ich, nur ist das genau was ich verhindern bzw. automatisieren möchte.
Da die Spalten relativ weit hinten sind macht das immer eine menge "Klick" Arbeit. Zudem arbeiten auch noch Kolleginnen damit.

Anzeige
AW: besser könnten - wir - helfen...
21.02.2016 22:03:01
Daniel
HI
lese die Datei eimal über den Import ein und mache dir die Mühe, die einstellungen richtig zu setzen.
wenn du jetzt eine neue Datei mit denselben Einstellungen lesen willst, reicht es aus, wenn du die so eingelesene Tabelle mit der rechten Maustaste anklickst und "aktualisieren" im Kontextmenü klickst.
Du kannst dann eine neue CSV-Datei zum Einlesen auswählen, aber Excel hat sich die Importeigenschaften gemerkt, so dass du diese nicht erneut machen musst sondern die Datei direkt übernehmen kannst.
wenn du jedoch ein Makro haben willst, so solltest du die Datei auch einmal über den Importassistenten mit den richtigen Einstellungen einlesen.
Für das Makro verwendest du dann zum Öffnen der Datei nicht Workbooks.Open sondern Workbooks.OpenText und kannst dann hier zusätzlich zum Dateinamen auch die gleichen Bedingungen angeben wie beim Importieren der Datei, so dass du den aufgezeichneten Code verwenden kannst, um die Einstellungen hier abzulesen.
Gruß Daniel

Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 16:42:17
Herbert
Hallo Torsten,
mit dem "Text-Import-Assistenten" kannst du ja schon mal den 3 betr. Sp. ein Textformat vergeben. Alternativ kannst du im Tabellenblatt in Excel die Sp AL:AN ebenfalls mit einem Textformat belegen. Dann bleiben die führenden Nullen schon mal erhalten.
Und hiermit kannst du einen Dialog zum öffnen einer Datei starten:
   Dim sWorkBookName$, vFile As Variant
'* Dialog zum öffnen der CSV-Datei
vFile = Application.GetOpenFilename
' an dieser Stelle musst du den Dateityp in der Auswahlbox auf .csv ändern
If vFile = False Then Exit Sub
Workbooks.Open vFile

Und was soll sonst noch passieren?
Servus

Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 16:54:44
Torsten
Hallo Herbert,
vielen Dank.
Dein Dialog öffnet den Dialog und ich kann die csv aufrufen jedoch wird si nicht Symikolon separiert geöffnet.
Ich möchte ja nicht den Textkonvertierungs-Aassisten verwenden.
Mein Wunsch wäre wenn das möglich ist, über VBA den öffnen Dialog aufzurufen, die csv Datei auszuwählen und dann sollte sich diese normal öffnen allerding die 3 besagten Spalten sollten sofort textformartiert sein, damit die Nullen erhalten bleiben.
Bei Deinem Code steht in der Datei Auswahl nur alle Formate drin ohne das ich es ändern könnte.
Das ließe sich ja mit:

vFile = Application.GetOpenFilename(filefilter:="Text Files (*.csv), *.csv")
ändern, aber trotzallen bleit es bei, öffnen nicht Symikolon separiert.

Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 17:06:33
Herbert
Hallo Torsten,
was ich dir empfehle ist folgendes:
Führe den CSV-Import einmal manuell in einer separaten Tabelle deiner AM durch und hol dir dann daraus die für dein Tabellenblatt benötigten Daten. Dies hätte auch den Vorteil, dass du die importierten Daten immer ganz einfach aktualisieren kannst.
Servus

Anzeige
AW: csv Datei öffnen und dabei drei Spalten gleich als
21.02.2016 17:25:52
Torsten
Alles klar Herbert,
trotz allem Danke.

allg. Lösung
23.02.2016 21:56:33
Michael
Hi zusammen,
der Code
Option Explicit
Sub DateiName()
Dim filetoopen As Variant
Dim pfad As String
pfad = Config.Range("C4").Value
ChDrive Mid(pfad, 1, 2)
ChDir pfad
filetoopen = Application.GetOpenFilename("CSV-Daten als *.csv, *.csv")
If filetoopen  False Then
Config.Range("c5").Value = filetoopen
Else
Config.Range("C5").Value = "nichts ausgewählt"
End If
End Sub
Sub CSV_Importieren()
Dim pfad As String
Dim a As Variant, a2 As Variant, az As Variant
Dim textspalten As Variant
Dim texteDa As Boolean, mit As Boolean, tmax&
Dim s As String
Dim i&, dNr%, z&, sp&, zl&, spZ&, zlZ&
Dim c As Range
pfad = Config.Range("C5").Value
textspalten = Split(Config.Range("c9").Value, ",")
tmax = UBound(textspalten)
texteDa = tmax > 0
If texteDa Then For i = 0 To tmax: textspalten(i) = textspalten(i) * 1: Next
If pfad  "nichts ausgewählt" Then
If Dir(pfad)  "" Then
Import.Cells.Clear
dNr = FreeFile
Open pfad For Binary As #dNr
s = Space(LOF(dNr))
Get #dNr, 1, s
Close #dNr
a = Split(s, vbCrLf)
zl = UBound(a)
sp = UBound(Split(a(1), ";"))
a2 = Import.Range("A1", Import.Cells(zl + 1, sp + 1))
For zlZ = 0 To zl - 1
az = Split(a(zlZ), ";")
For spZ = 0 To UBound(az)
a2(zlZ + 1, spZ + 1) = az(spZ)
Next
Next
If texteDa Then
For i = 0 To tmax
sp = textspalten(i)
For zlZ = 1 To zl
a2(zlZ, sp) = "'" & a2(zlZ, sp)
Next
Next
End If
Import.Range("A1", Import.Cells(zl + 1, sp + 1)) = a2
End If
End If
End Sub
liest alles in ein Array ein und holt sich aus dem Config-Blatt die Info, in welchen Spalten die Zahlen (oder besser: Ziffernfolge) als Text übernommen werden sollen.
Der Trick ist, ein "'" voranzustellen: das ist in der Tabelle weder sichtbar, noch wird es ausgedruckt, das ist nur ein Kennzeichen für Excel, daß "Text" folgt.
Das Makro ist nicht völlig durchoptimiert, sollte aber so schon gut fix arbeiten.
Testdatei: https://www.herber.de/bbs/user/103829.xlsm
Schöne Grüße,
Michael
P.S.: In Deiner Datei sind nicht immer führende Nullen vorhanden, so daß evtl. eine nachträgliche Formatierung doch noch Sinn macht.

Anzeige
AW: allg. Lösung
24.02.2016 18:45:58
Torsten
Hallo MIchael,
erst einmal vielen Dank für die Mühen.
Ich habe meinen Pfad in der Datei angepasst und kann diese auswählen, beim Import jedoch bekomme ich einen Debugg, Laufzeitfehler 9, Index außerhalb des gültigen Bereichs?
If pfad  "nichts ausgewählt" Then
If Dir(pfad)  "" Then
Import.Cells.Clear
dNr = FreeFile
Open pfad For Binary As #dNr
s = Space(LOF(dNr))
Get #dNr, 1, s
Close #dNr
a = Split(s, vbCrLf)
zl = UBound(a)
sp = UBound(Split(a(1), ";"))
a2 = Import.Range("A1", Import.Cells(zl + 1, sp + 1))

Anzeige
immer diese Textdateien...
25.02.2016 17:27:15
Michael
Hi Torsten,
laß Dir mal die Anzahl ausgeben:
If pfad  "nichts ausgewählt" Then
If Dir(pfad)  "" Then
Import.Cells.Clear
dNr = FreeFile
Open pfad For Binary As #dNr
s = Space(LOF(dNr))
Get #dNr, 1, s
Close #dNr
a = Split(s, vbCrLf)
zl = UBound(a)
' ***************** hier
msgbox zl
sp = UBound(Split(a(1), ";"))
a2 = Import.Range("A1", Import.Cells(zl + 1, sp + 1))
Ich vermute, daß zl = 0 ist, was daran liegen sollte, daß ich vorher nach vbcrlf - also Zeilenumbruch mit CR = chr(13) und LF = chr(10) splitte - ich hatte die Datei aus dem Browser kopiert.
Wahrscheinlich ist Deine Datei nur mit LF oder CR getrennt, dann mußt Du das in dem split anpassen.
Evtl. lade noch mal ne Datei gezipt hoch, damit ich sie herunterladen kann, wie sie ist.
Schöne Grüße,
Michael

Anzeige
AW: allg. Lösung
24.02.2016 18:51:34
Torsten
Hallo MIchael,
erts einmal vielen Dank für die Mühen.
Ich habe meinen Pfad angepasst, kann die Datei wählen, bekomme allerdings beim Import einen
Debugg, Laufzeitfehler 9, Index außerhalb des gültigen Bereichs
If pfad  "nichts ausgewählt" Then
If Dir(pfad)  "" Then
Import.Cells.Clear
dNr = FreeFile
Open pfad For Binary As #dNr
s = Space(LOF(dNr))
Get #dNr, 1, s
Close #dNr
a = Split(s, vbCrLf)
zl = UBound(a)
sp = UBound(Split(a(1), ";"))
a2 = Import.Range("A1", Import.Cells(zl + 1, sp + 1))

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV-Datei in Excel korrekt öffnen und formatieren


Schritt-für-Schritt-Anleitung

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

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

  3. Code eingeben: Füge folgenden Code ein, um die CSV-Datei zu öffnen und spezifische Spalten als Text zu formatieren:

    Sub CSV_Datei_Oeffnen()
       Dim vFile As Variant
       vFile = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv")
    
       If vFile = False Then Exit Sub
    
       Workbooks.OpenText Filename:=vFile, DataType:=xlDelimited, _
           TextQualifier:=xlDoubleQuote, Semicolon:=True, _
           FieldInfo:=Array(1, 1, 2, 1, 3, 1) 'Hier die Spalten AL, AM, AN anpassen
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Excel öffnet CSV in einer Spalte: Stelle sicher, dass die DataType korrekt auf xlDelimited gesetzt ist und die Trennzeichen (z.B. Semikolons) richtig angegeben sind.

  • Fehlermeldung: Index außerhalb des gültigen Bereichs: Überprüfe, ob die CSV-Datei tatsächlich Daten enthält und ob die Spaltennummern im FieldInfo-Array korrekt sind.

  • Excel textkonvertierungsassistent wird nicht gestartet: Wenn der Textkonvertierungsassistent nicht angezeigt wird, überprüfe den Code und stelle sicher, dass Workbooks.OpenText verwendet wird.


Alternative Methoden

  • Datenimport über das Menü: Gehe zu Daten > Externe Daten > Aus Text. Dies öffnet den Textimportassistenten, wo Du die Formatierung der Spalten manuell festlegen kannst.

  • CSV-Datei bearbeiten ohne Excel: Du kannst eine Textverarbeitungssoftware oder einen Texteditor verwenden, um die CSV-Datei vor dem Import in Excel zu bearbeiten.


Praktische Beispiele

  • Öffnen einer CSV-Datei mit führenden Nullen: Verwende den oben genannten VBA-Code und achte darauf, dass die Spalten AL bis AN als Text formatiert werden.

  • CSV-Datei in Excel umwandeln: Wenn Du eine CSV-Datei mit verschiedenen Trennzeichen hast, passe den FieldInfo-Parameter im VBA-Code entsprechend an.

FieldInfo:=Array(1, 1, 2, 2, 3, 1) ' Beispiel für unterschiedliche Formate

Tipps für Profis

  • Automatisierung: Wenn Du oft mit CSV-Dateien arbeitest, speichere das Makro in Deiner Personal.xlsb, um es jederzeit zur Verfügung zu haben.

  • Fehlersuche: Nutze Debug.Print im VBA, um Werte während der Ausführung zu prüfen. Dies kann helfen, Probleme schnell zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich die Spalten AL bis AN automatisch als Text formatieren?
Verwende FieldInfo im Workbooks.OpenText Befehl, um die gewünschten Spalten als Text zu formatieren.

2. Was tun, wenn Excel die führenden Nullen entfernt?
Stelle sicher, dass die Spalten im FieldInfo-Array als Text (1) definiert sind, um die führenden Nullen zu bewahren.

3. Kann ich den Textkonvertierungsassistenten umgehen?
Ja, indem Du den Workbooks.OpenText Befehl im VBA nutzt, kannst Du die CSV-Datei direkt mit den gewünschten Einstellungen öffnen.

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