Anzeige
Archiv - Navigation
788to792
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
788to792
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mehrere externe *.txt einlesen + sortieren

Mehrere externe *.txt einlesen + sortieren
10.08.2006 11:49:43
Jens
Hallo zusammen.
Ich habe zwar schon ein wenig recherchiert, konnte aber noch nicht den richtigen Ansatz für mein 'Problem' finden und hoffe nun, dass mir hier jemand einen Lösungsansatz geben kann:
Ich habe mehrere Textdateien (max 31) deren Inhalt ich in einem Rutsch in Excel einlesen und formatieren möchte um dort eine Statistik zu erstellen. Die Textdateien sind wie folgt aufgebaut:
[HEAD 1]
Beispiel=1
Beispiel=19
Beispiel=15
[HEAD 2]
Beispiel=1
[HEAD 3]
Beispiel=4
usw.
Die Einträge in den eckigen Klammern kann man als Überschrift bezeichnen, die Einträge darunter, deren Anzahl variabel ist, sind als Zähler zu sehen. Die Formatierung der Textdateien ist vertikal, möchte aber, dass die Daten nach dem Einlesen, auf einem Arbeitsblatt horizontal vorliegen. Geht das überhaupt und wenn ja, wie?
Bin für jeden Tip dankbar!
Gruß, Jens

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere externe *.txt einlesen + sortieren
10.08.2006 15:13:53
fcs
Hallo Jens,
ich habe in der Beispiel-Datei mal 2 Makro-Varianten für den Text-Import in eine Excel-Datei eingebaut. Die Makros erstellen eine neue Arbeitsmappe mit den importierten Daten.
https://www.herber.de/bbs/user/35709.xls
Gruß
Franz
Hier der Code erstellt unter Excel 2003:

Sub TextImport()
'Alle Daten auf ein Blatt
Dim wb As Workbook, wks As Worksheet, Zeile1 As Long, Zeile2 As Long, Dateien As Variant, Text As Variant
Dim I As Integer, Spalte As Integer, SpaltenUe As Integer
' Auswahldialog für Dateien anzeigen
Dateien = Application.GetOpenFilename(FileFilter:="Textfiles (*.txt),*.txt", _
Title:="Bitte einzulesende Text-Dateien auswählen, Mehrfachauswahl ist möglich", MultiSelect:=True)
On Error GoTo Fehler ' Fängt Fehler ab, wenn Abbrechen gewählt wurde
If UBound(Dateien) > 0 Then
' Neues Mappe erstellen mit 1. Blatt
Workbooks.Add Template:=xlWBATWorksheet
Set wks = ActiveSheet
SpaltenUe = 1 'Anzahl Spalten mit Überschriften-Titeln
ZeileUe = 1
wks.Cells(ZeileUe, SpaltenUe) = "Textdatei"
Zeile1 = ZeileUe + 1
Zeile2 = Zeile1
For I = 1 To UBound(Dateien)
'Daten einlesen
Open Dateien(I) For Input Access Read As #1
Do Until EOF(1)
Line Input #1, Text
If Left(Text, 1) = "[" Then 'Header
'Überschriften vergleichen und ggf. einfügen
For Spalte = 2 To SpaltenUe + 1
If IsEmpty(wks.Cells(ZeileUe, Spalte)) Then
wks.Cells(ZeileUe, Spalte) = Text
SpaltenUe = SpaltenUe + 1
Exit For
Else
If wks.Cells(ZeileUe, Spalte) = Text Then Exit For
End If
Next
Zeile = Zeile1
Else
wks.Cells(Zeile, Spalte) = Text
If Zeile > Zeile2 Then Zeile2 = Zeile
Zeile = Zeile + 1
End If
Loop
Close #1
'Dateinamen in 1. Spalte Eintragen
For Zeile = Zeile1 To Zeile2
wks.Cells(Zeile, 1) = Dateien(I)
Next
Zeile1 = Zeile2 + 1
Zeile2 = Zeile1
Next
wks.Columns(1).AutoFit 'Spalte A auf optimale Breite einstellen
wks.Range("B2").Select
ActiveWindow.FreezePanes = True
End If
Fehler:
End Sub
Sub TextImport2()
'Daten jeder Text-Datei auf eigenes Blatt
Dim wks As Worksheet, Zeile1 As Long, Zeile2 As Long, Dateien As Variant, Text As Variant
Dim I As Integer, J As Integer, Spalte As Integer, Tabname As String
' Auswahldialog für Dateien anzeigen
Dateien = Application.GetOpenFilename(FileFilter:="Textfiles (*.txt),*.txt", _
Title:="Bitte einzulesende Text-Dateien auswählen, Mehrfachauswahl ist möglich", MultiSelect:=True)
On Error GoTo Fehler ' Fängt Fehler ab, wenn Abbrechen gewählt wurde
If UBound(Dateien) > 0 Then
' Neues Mappe erstellen mit 1. Blatt
Workbooks.Add Template:=xlWBATWorksheet
For I = 1 To UBound(Dateien)
Set wks = ActiveSheet
'Tabellenname = Name Textdatei ohne Pfad und Endung .txt
Tabname = ""
For J = Len(Dateien(I)) - 4 To 1 Step -1
If Mid(Dateien(I), J, 1) <> "\" Then
Tabname = Mid(Dateien(I), J, 1) & Tabname
Else
Exit For
End If
Next
Spalte = 0 'Anzahl Spalten mit Überschriften-Titeln
ZeileUe = 1
wks.Name = Tabname
Zeile1 = ZeileUe + 1
Zeile2 = Zeile1
'Daten einlesen
Open Dateien(I) For Input Access Read As #1
Do Until EOF(1)
Line Input #1, Text
If Left(Text, 1) = "[" Then 'Header
'Überschrifte einfügen
Spalte = Spalte + 1
wks.Cells(ZeileUe, Spalte) = Text
Zeile = Zeile1 'Zeilenzähler setzen
Else
wks.Cells(Zeile, Spalte) = Text
If Zeile > Zeile2 Then Zeile2 = Zeile
Zeile = Zeile + 1
End If
Loop
Close #1
wks.Range("A2").Select
ActiveWindow.FreezePanes = True
Zeile1 = Zeile2 + 1
Zeile2 = Zeile1
If I < UBound(Dateien) Then
' Neues Blatt einfügen
Worksheets.Add After:=Sheets(Sheets.Count)
End If
Next
End If
Fehler:
End Sub

Anzeige
AW: Mehrere externe *.txt einlesen + sortieren
10.08.2006 15:32:27
Jens
Hallo fcs (Franz).
Das ist ja der absolute Hammer!!
Du glaubst ja gar nicht wie sehr Du mir damit geholfen hast! HERZLICHEN DANK!
Aehm...kann man das auch über die Makros so hinbekommen, dass alles was rechts neben dem '=' steht in eine eigene Spalte geschrieben wird?
Gruß
Jens
AW: Mehrere externe *.txt einlesen + sortieren
10.08.2006 17:30:25
fcs
Hallo Jens,
das war jetzt die leichtere Übung :)
Ich bin mal davon ausgegangen, das rechts vom "=" immer ganze Zahlen stehen und lasse den Text in eine Zahl konvertieren. Falls dem nicht so ist, dann in der entsprechenden Zeile die Val(...)-Funktion in der Anweisung wieder entfernen. Falls bei Dezimalzahlen "," statt "." verwendet wird, dann "Val" durch "CDbl" ersetzen.
Gruß
Franz
Hier der angepasstte Code:

Sub TextImport()
'Alle Daten auf ein Blatt
Dim wb As Workbook, wks As Worksheet, Zeile1 As Long, Zeile2 As Long, Dateien As Variant, Text As Variant
Dim I As Integer, Spalte As Integer, SpaltenUe As Integer
' Auswahldialog für Dateien anzeigen
Dateien = Application.GetOpenFilename(Filefilter:="Textfiles (*.txt),*.txt", _
Title:="Bitte einzulesende Text-Dateien auswählen, Mehrfachauswahl ist möglich", MultiSelect:=True)
On Error GoTo Fehler ' Fängt Fehler ab, wenn Abbrechen gewählt wurde
If UBound(Dateien) > 0 Then
' Neues Mappe erstellen mit 1. Blatt
Workbooks.Add Template:=xlWBATWorksheet
Set wks = ActiveSheet
SpaltenUe = 1 'Anzahl Spalten mit Überschriften-Titeln
ZeileUe = 1
wks.Cells(ZeileUe, SpaltenUe) = "Textdatei"
Zeile1 = ZeileUe + 1
Zeile2 = Zeile1
For I = 1 To UBound(Dateien)
'Daten einlesen
Open Dateien(I) For Input Access Read As #1
Do Until EOF(1)
Line Input #1, Text
If Left(Text, 1) = "[" Then 'Header
'Überschriften vergleichen und ggf. einfügen
For Spalte = 2 To SpaltenUe + 1
If IsEmpty(wks.Cells(ZeileUe, Spalte)) Then
wks.Cells(ZeileUe, Spalte) = Text
wks.Cells(ZeileUe, Spalte + 1) = Text & "_Wert"
SpaltenUe = SpaltenUe + 2
Exit For
Else
If wks.Cells(ZeileUe, Spalte) = Text Then Exit For
End If
Next
Zeile = Zeile1
Else
wks.Cells(Zeile, Spalte) = Trim(Mid(Text, 1, InStr(1, Text, "=") - 1))
wks.Cells(Zeile, Spalte + 1) = Val(Trim(Mid(Text, InStr(1, Text, "=") + 1, 100)))
If Zeile > Zeile2 Then Zeile2 = Zeile
Zeile = Zeile + 1
End If
Loop
Close #1
'Dateinamen in 1. Spalte Eintragen
For Zeile = Zeile1 To Zeile2
wks.Cells(Zeile, 1) = Dateien(I)
Next
Zeile1 = Zeile2 + 1
Zeile2 = Zeile1
Next
wks.Columns(1).AutoFit 'Spalte A auf optimale Breite einstellen
wks.Range("B2").Select
ActiveWindow.FreezePanes = True
End If
Fehler:
End Sub
Sub TextImport2()
'Daten jeder Text-Datei auf eigenes Blatt
Dim wks As Worksheet, Zeile1 As Long, Zeile2 As Long, Dateien As Variant, Text As Variant
Dim I As Integer, J As Integer, Spalte As Integer, Tabname As String
' Auswahldialog für Dateien anzeigen
Dateien = Application.GetOpenFilename(Filefilter:="Textfiles (*.txt),*.txt", _
Title:="Bitte einzulesende Text-Dateien auswählen, Mehrfachauswahl ist möglich", MultiSelect:=True)
On Error GoTo Fehler ' Fängt Fehler ab, wenn Abbrechen gewählt wurde
If UBound(Dateien) > 0 Then
' Neues Mappe erstellen mit 1. Blatt
Workbooks.Add Template:=xlWBATWorksheet
For I = 1 To UBound(Dateien)
Set wks = ActiveSheet
'Tabellenname = Name Textdatei ohne Pfad und Endung .txt
Tabname = ""
For J = Len(Dateien(I)) - 4 To 1 Step -1
If Mid(Dateien(I), J, 1) <> "\" Then
Tabname = Mid(Dateien(I), J, 1) & Tabname
Else
Exit For
End If
Next
Spalte = -1 'Anzahl Spalten mit Überschriften-Titeln
ZeileUe = 1
wks.Name = Tabname
Zeile1 = ZeileUe + 1
Zeile2 = Zeile1
'Daten einlesen
Open Dateien(I) For Input Access Read As #1
Do Until EOF(1)
Line Input #1, Text
If Left(Text, 1) = "[" Then 'Header
'Überschrifte einfügen
Spalte = Spalte + 2
wks.Cells(ZeileUe, Spalte) = Text
wks.Cells(ZeileUe, Spalte + 1) = Text & "_Wert"
Zeile = Zeile1 'Zeilenzähler setzen
Else
wks.Cells(Zeile, Spalte) = Trim(Mid(Text, 1, InStr(1, Text, "=") - 1))
wks.Cells(Zeile, Spalte + 1) = Val(Trim(Mid(Text, InStr(1, Text, "=") + 1, 100)))
If Zeile > Zeile2 Then Zeile2 = Zeile
Zeile = Zeile + 1
End If
Loop
Close #1
wks.Range("A2").Select
ActiveWindow.FreezePanes = True
Zeile1 = Zeile2 + 1
Zeile2 = Zeile1
If I < UBound(Dateien) Then
' Neues Blatt einfügen
Worksheets.Add After:=Sheets(Sheets.Count)
End If
Next
End If
Fehler:
End Sub

Anzeige
AW: Mehrere externe *.txt einlesen + sortieren
11.08.2006 07:37:30
Jens
Was soll ich sagen? D A N K E !!!
Funktioniert einwandfrei und so wie ich es mir gedacht/vorgestellt habe. Wunderbar!! Kann man Dich auch mieten :-)
Habe doch noch so ein - drei Vorstellungen, wo ich nicht weis wie man diese hinbekommt...
Herzlichen Danke und viele Grüße!
Jens

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige