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

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.

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

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

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

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

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))

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))

274 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige