Microsoft Excel

Excel und VBA: Beitrag aus Herbers Excel-Forumsarchiv

Datenimport aus mehreren Textdateien

Betrifft: Datenimport aus mehreren Textdateien
von: viktor bruckman
Geschrieben am: 30.12.2011 19:05:53

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:

http://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

  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: JoWe
Geschrieben am: 30.12.2011 19:46:17

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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: Oberschlumpf
Geschrieben am: 30.12.2011 21:16:37

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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: viktor bruckman
Geschrieben am: 30.12.2011 22:24:10

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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: viktor bruckman
Geschrieben am: 30.12.2011 22:32:02

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!


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: JoWE
Geschrieben am: 01.01.2012 12:04:46

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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: Reinhard
Geschrieben am: 01.01.2012 13:20:08

Hallo Viktor,

ändere mal beim Dim der Zeilen und Spalten von Integer auf Long.

GRuß
Reinhard


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: jowe
Geschrieben am: 01.01.2012 14:46:55

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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: viktor bruckman
Geschrieben am: 01.01.2012 16:29:14

Hallo Jochen,

Werde mir das später anschauen, danke für die Hilfe.
Wie die Textdatei aussieht, siehst du hier:

http://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


  

Betrifft: AW: Datenimport aus mehreren Textdateien
von: viktor bruckman
Geschrieben am: 03.01.2012 11:24:37

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