Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenimport aus mehreren Textdateien

Datenimport aus mehreren Textdateien
viktor
Liebe VBA Profis,
Habe mich länger nicht mit VB beschäftigt, daher stehe ich nun bei folgendem Problem an:
Ich habe ein Verzeichnis mit vielen (>100) Textdateien, mit der Endung *dpt. In jeder Datei sind zwei Spalten, durch TAB getrennt. Dabei ist Spalte 1 die Y-Achse, Spalte 2 bezeichnet die X-Achse. Ich möchte nun automatisiert alle Spalten 2 aus allen *.dpt-Dateien nebeneinander in der Excel-Datei haben. Als Kopfzeile soll einfach der Dateiname genommen werden.
Um das besser zu veranschaulichen, habe ich mal folgendes angehängt:
https://www.herber.de/bbs/user/78143.xlsx
Ich habe mit folgendem Code versucht zu experimentieren, ich denke da fehlen nur kleine Anpassungen, um die ich jemanden von euch höflich bitte:
Sub Text_Import_alle()
Dim Zeile As Integer
Dim Spalte As Integer
Dim pos As Integer
Dim pfadfile As String
Dim fileart As String
Dim strTmp As String
'StartVerzeichnis - bitte anpassen
ChDrive "e:\"
ChDir "\testdaten"
pfadfile = "e:\testdaten"
fileart = "*.dpt"
'Start der Verarbeitung
Zeile = 1
fn = Dir(pfadfile & fileart)
Do While fn  ""
Open fn For Input As #1
Cells(Zeile, 1).Value = fn   ' Dateiname
Do While Not EOF(1)
Line Input #1, strTxt
pos = InStr(1, strTxt, ",")
Spalte = 2
Do While pos > 0
Cells(Zeile, Spalte).Value = Mid(strTxt, 1, pos - 1)
strTxt = Mid(strTxt, pos + 1)
pos = InStr(1, strTxt, ",")
Spalte = Spalte + 1
Loop
Cells(Zeile, Spalte).Value = strTxt     'letzer Rest
Zeile = Zeile + 1
Loop
Close
Zeile = Zeile + 1
fn = Dir()
Loop
Close #1
End Sub

Wenn ich das Makro allerdings so wie es ist ausführe, tut sich garnichts.
Wäre für Hilfe sehr dankbar.
Abgesehen davon wünsche ich allen die das lesen das Beste für 2012!
Beste Grüße,
Viktor
AW: Datenimport aus mehreren Textdateien
30.12.2011 19:46:17
JoWe
Hallo Viktor,
du mußt lediglich die 2. Zeile nach 'Start der Verarbeitung um den Backslash erweitern:
also so: fn = Dir(pfadfile & "\" & fileart)
Gruß
Jochen
AW: Datenimport aus mehreren Textdateien
30.12.2011 21:16:37
Oberschlumpf
Hi Viktor
Und wenn du nicht aus anderen Gründen in das Verzeichnis wechseln musst, dann kannst du diese Zeilen löschen:

ChDrive "e:\"
ChDir "\testdaten"
Ciao
Thorsten
AW: Datenimport aus mehreren Textdateien
30.12.2011 22:24:10
viktor
Lieber Jochen,
Danke, das war schon mal ein guter tipp, damit läuft es schon recht gut. Allerdings bleiben zwei Probleme:
1.) Beide Spalten der Textdatei (durch TAB getrennt) werden in eine Spalte der Excel Arbeitsmappe importiert, da mischen sich Kraut und Rüben; ich bräuchte nur die zweite Spalte der Textdatei.
2.) Die Spalten werden untereinander importiert, nicht nebeneinander so wie ich es bräuchte.
Lieber Thorsten,
Wenn ich das weglasse, kommt ein Laufzeitfehler "Datei nicht gefunden". Habs dann wieder reingeschrieben.
Könnte mir jemand noch einen Hinweis geben, wie ich das hinbekommen kann?
Danke und beste Grüße,
Viktor
Anzeige
AW: Datenimport aus mehreren Textdateien
30.12.2011 22:32:02
viktor
Achja, nochwas: Wahrscheinlich, weil die Spalten untereinander eingefügt werden kommt schon bald ein Überlauf und das Script bricht ab (Bei Zeile 32.737).
Ich nehme an das ist nebeneinander kein Problem. Eine Textdatei hat 7.466 Zeilen, und es sind 405 Textdateien. Schafft das Excel überhaupt?
Wenn nicht muss ich das halt auf 2 Arbeitsmappen aufteilen...
DANKE!
AW: Datenimport aus mehreren Textdateien
01.01.2012 12:04:46
JoWE
Hallo Viktor
stell doch mal einige der beschriebenen Textdateien und eine Arbeitsmappe mit einem beispielhaften Ergebnis hier ein. Ich denke das Ganze ist nicht wirklich schwierig und Excel 2007 sollte auch mit der Datenmenge klarkommen.
Gruß
Jochen
Anzeige
AW: Datenimport aus mehreren Textdateien
01.01.2012 13:20:08
Reinhard
Hallo Viktor,
ändere mal beim Dim der Zeilen und Spalten von Integer auf Long.
GRuß
Reinhard
AW: Datenimport aus mehreren Textdateien
01.01.2012 14:46:55
jowe
... so würde ich es machen (ohne Deine Textdateien zu kennen):
Option Explicit
Sub Text_Import_alle()
Dim sp, ze, i As Long
Dim fn, pfadfile, fileart, strTmp, strTxt As String
Dim x As Variant
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets(1)
'StartVerzeichnis - bitte anpassen
ChDrive "e:\"
ChDir "\testdaten"
pfadfile = "e:\testdaten"
fileart = "*.dpt"
'Start der Verarbeitung
With sh
ze = 1
fn = Dir(pfadfile & "\" & fileart)
Do While fn  ""
sp = 2
.Cells(ze, 1).Value = fn
Open fn For Input As #1
Do While Not EOF(1)
Line Input #1, strTxt
x = Split(strTxt, vbTab)
For i = 1 To UBound(x)
.Cells(ze, sp).NumberFormat = "0.00000"
.Cells(ze, sp) = x(i)
Next i
sp = sp + 1
Loop
Close
sp = 2
ze = ze + 1
fn = Dir()
Loop
Close #1
End With
End Sub

Gruß
Jochen
Anzeige
AW: Datenimport aus mehreren Textdateien
01.01.2012 16:29:14
viktor
Hallo Jochen,
Werde mir das später anschauen, danke für die Hilfe.
Wie die Textdatei aussieht, siehst du hier:
https://www.herber.de/bbs/user/78143.xlsx
Einfach zwei Spalten, wovon ich nur die rechte importiert brauche, die linke ist ja redundant und kommt in jedem file vor.
Ich probier es mal aus und berichte dann. Vielen Dank und Alles Gute im neuen Jahr!
Viktor
AW: Datenimport aus mehreren Textdateien
03.01.2012 11:24:37
viktor
Lieber Jochen,
Vielen Dank, das funktioniert tadellos! Ich habe den code allerdings um eine Kleinigkeit erweitert, und zwar:
Next i
sp = sp + 1
Loop
Close
Application.Wait (Now + TimeValue ("0:00:01"))
sp = 2
ze = ze + 1
fn = Dir ()
Das hatte einfach den Grund, weil Excel beim Einlesen der Files so beschäftigt ist, dass nicht einmal mehr der Bildschirminhalt aktualisiert wird, und man somit keine Ahnung hat wie weit das Makro schon ist. Mit der Pause wird dann jede Zeile aktualisiert und man weiß immer den aktuellen Stand - quasi Fortschrittsanzeige. Denn schnell ist das nicht gerade. Die 405 Dateien haben bestimmt mehr als eine Stunde gebraucht, genau weiß ich es nicht, habe dann den PC einfach laufen lassen... Aber in jedem Fall ist es wesentlich schneller als manuelles copy&paste... na gute Nacht.
Was mich noch interessiert: Was genau bedeutet eigentlich das "Option Explicit" am Anfang? Ohne dem geht es nämlich nicht und beim vorigen Beispiel war das auch nicht dabei - frage rein aus Interesse.
Alles in Allem, besten Dank!
Viktor
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige