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

VBA Spalten in Textdateien auslesen & einfügen

VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 09:19:39
Moe
Hallo zusammen
Folgendes Problem, welches ich mit meinen Kenntnissen nicht lösen kann:
Ich habe sehr viele prn-files (welche wie .txt-files behandelt werden können) mit vielen Spalten und Zeilen.
Nun möchte ich mit den filenamen (TEMPERATURES, ENERGY, ZONE-ENERGY, usw.) und den Spaltennamen (q_cool, q_heat q_e_equip, usw.) die Werte auswählen und Spalte für Spalte im aktiven Woksheet im Excel ab der Zelle D10 einfügen. Hier eine Beispieldatei https://www.herber.de/bbs/user/104880.txt
Danke für eure Hilfe!
Gruss,
Moe

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 10:21:58
Fennek
Hallo,
falls es nicht mehr als einige hundert Dateien sind, könnte ein Ansatz -eine nach der anderen Datei- funktionieren.
Da mir aus deiner Beschreibung nicht so klar ist, welche Spalten ausgewählt werden sollen und wie die gewünschte Struktur ist, hier nur der code, der viele dateein nacheinander einliest.

Sub moe()
SPfad = "c:\temp\" 'anpassen
SDatei = dir(sPfad& "*.prn)
Do until sDatei = ""
'Hier kommen die code zum einlesen
sDatei = dir
Loop
End sub
Mfg

AW: VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 11:10:31
Moe
Hi
Danke erstmals für die rasche Antwort! Als Test möchte ich gerne die Spalten "q_heat", "c_cool" und "top" kopieren. Diese sind in den .prn-files "TEMPERATURES" und "ZONE-ENERGY" gespeichert. Die Namen der Files und der Spalten würde ich gerne in einer Klammer, unterteilt wenn möglich mit Strichpunkt, auflisten könnnen.
Danach soll es mir alle gewünschten Spalten im aktiven Worksheet ab der Zelle D10 rein kopieren.
Gruss,
Moe

Anzeige
AW: VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 13:08:55
Moe
Hey
Leider kopiert das Makro nur den Namen des prn-files und fügt ihn in die Zelle A10. Weisst du wieso? und wo kann ich die Spaltennamen eintragen?
Die dritte, oben genannte Spalte ("top") ist in einem anderen prn-file mit dem Namen "TEMPERATURES". Hier das test-file: https://www.herber.de/bbs/user/104889.txt
Hier mein aktueller Code:
Sub Spalten_einfügen()
Dim WBQ As Workbook 'Quelle
sPfad = "C:\WORK\TransferLocal\01_Projekte\Python-Script\Beispiel_Test" 'anpassen
sDatei = "\ZONE-ENERGY.prn" 'anpassen, z.B. Temperatures.prn
Set WBQ = Workbooks.Open(sPfad & sDatei)
lr = WBQ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row
i = 10
ThisWorkbook.Sheets(1).Cells(i, "A") = WBQ.Name
WBQ.Sheets(1).Range(Cells(1, "D"), Cells(lr, "D")).Copy ThisWorkbook.Sheets(1).Cells(10, "D" _
)
WBQ.Sheets(1).Range(Cells(1, "F"), Cells(lr, "F")).Copy ThisWorkbook.Sheets(1).Cells(10, "E" _
)
WBQ.Close 0
End Sub
Gruss,
Moe

Anzeige
AW: VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 11:39:35
Fennek
Hallo Moe,
hier als 'proof of concept' ein kleines Makro, das EINE Datei öffnet und zwei deiner gewünschten Spalten ausliest. Die dritte habe ich in deinem Beispiel nicht gefunden.
Es bleibt noch viel zu tun.

Sub sMoe()
'Proof of Concept
Dim WBQ As Workbook 'Quelle
sPfad = "c:\temp\" 'anpassen
sDatei = "Moe.txt" 'anpassen, z.B. Temperatures.prn
Set WBQ = Workbooks.Open(sPfad & sDatei)
lr = WBQ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row
i = 10
ThisWorkbook.Sheets(1).Cells(i, "A") = WBQ.Name
WBQ.Sheets(1).Range(Cells(1, "D"), Cells(lr, "D")).Copy ThisWorkbook.Sheets(1).Cells(10, "D")
WBQ.Sheets(1).Range(Cells(1, "F"), Cells(lr, "F")).Copy ThisWorkbook.Sheets(1).Cells(10, "E")
WBQ.Close 0
End Sub
mfg

Anzeige
AW: Version 1
11.04.2016 14:09:41
Fennek
Hallo Moe,
hier eine Version, die mit deiner gezeigten TxT-Datei funktioniert. Die Spalte "cool" ist leer, aber sonst könnte es passen.
Es ist eine Lösung mit 3 geöffneten Datei, eine für den Makro, eine um alle Daten zu speichern, und jeweils eine prn-Datei.
Diese Lösung könnte passen für bis zu ca 500 prn-Dateien. Falls es mehr als tausend sein sollte, könnte dieser Ansatz zu langsam werden und es müßte ein völlig anderer gewählt werden.

Sub sMoe()
'Version 1
Dim WBZ As Workbook 'Ziel
Dim WBQ As Workbook 'Quelle
sPfad = "c:\temp\" 'anpassen
Set WBZ = Workbooks.Open(sPfad & "Moe_Ziel.xlsx")
sDatei = Dir(sPfad & "Moe*.prn") 'anpassen, z.B. Temperatures.prn
Do Until sDatei = ""
Set WBQ = Workbooks.Open(sPfad & sDatei)
WBQ.Sheets(1).Columns(1).Replace ".", ","
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
13, 1 _
), Array(14, 1)), TrailingMinusNumbers:=True
lrq = WBQ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row
lrz = WBZ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row + 1
lrz = IIf(lrz > 10, lrz, 10)
WBZ.Sheets(1).Cells(lrz, "A") = WBQ.Name
WBQ.Sheets(1).Range(Cells(1, "D"), Cells(lrq, "D")).Copy WBZ.Sheets(1).Cells(lrz, "D")
WBQ.Sheets(1).Range(Cells(1, "F"), Cells(lrq, "F")).Copy WBZ.Sheets(1).Cells(lrz, "E")
WBQ.Close 0
sDatei = Dir
Loop
WBZ.Close 1
End Sub
mfg

Anzeige
AW: Version 1
11.04.2016 14:59:28
Moe
Hi Fennek
Ich weiss nicht genau wieso, aber bei mir kopiert es keine Spalten in das aktive Worksheet, obschon ich der Pfad und die Namen angepasst habe... :/
Du schreibst, dass drei Dateien geöffnet sein müssen: Makro, Datei zum Speichern & prn-file. Ich denke, dass das Makro in der gleichen Datei sein sollte, wie die wo es abgespeichert wird, so kann man direkt alles in der aktiven Worsheet laufen lassen (auch im Code). Es wäre hilfreich (oder zwingend), wenn ich die prn-files nicht geöffnet haben muss, da es eine riesen Menge ist und ich nicht alle gleichzeitig geöffnet haben kann.
Wegen der Geschwindigkeit:
Es können durchaus ca. 1000 prn-files sein und die Beispiel-Dateien die ich hochgeladen habe, sind gekürzt. Original haben die Files 8761 Zeilen. Müssen wir in demfall das "Konzept" ändern?
Danke für deine Hilfe und Gruss,
Moe

Anzeige
AW: Anzahl Dateien
11.04.2016 15:35:49
Fennek
Hallo Moe,
der einfache Ansatz ist alle prn-Dateien NACHEINANDER zu öffnen, auszulesen und dann wieder zu schließen. Die Größe der Datei spielt dabei keine Rolle.
Die Alternative wäre, alle prn-Dateien mit dem Betriebssystem in eine Datei zu kopieren und diese eine, dann recht große in Excel einzulesen. Das ist -typischerweise- wesentlich schneller, da xl seeeeehr langsam Dateien öffnet.
Zusammenkopieren geht über den alten dos-Befehl
Cmd-Fenster öffnen (Ausführen: cmd.exe)
Ins richtige Verzeichnis wechsel,
Copy *.prn alle.txt
Dauert -vermutlich- auch bei tausend Dateien ca 5 Sekunden.
Willst du zurück in die Computer-Steinzeit umd es mit eine dos-Befehl versuchen?
Mfg
Ps: wenn du keine separaten Makro und Daten - Dateien möchtest, setze WBZ auf activesheet.

Anzeige
AW: Anzahl Dateien
11.04.2016 16:39:28
Moe
Hallo Fennek
Nein, wir versuchen trotzdem alles im VBA zu machen, dann habe ich es zusammen und wir gehen nicht in die Computer-Steinzeit zurück... ;)
Das Kopieren der Spalten "q_cool" und "c_heat" funktioniert jetzt auch. Nun wäre der nächste Schritt, dass ich im zweiten prn-file "TEMPERATURES.prn" die Spalte "top" kopiere. Noch wegen den Werten; diese sind nicht als Zahl gespeichert und mit einem "," getrennt, dies müsste sich ändern (0,123 = 0.123).
Wie müsste da der Code aussehen?
Gruss
Moe

AW: Anzahl Dateien
11.04.2016 17:13:31
Fennek
Hallo,
ohne eine Beispieldatei wird es nicht gehen.
In der ersten Txt-Datei war das Dezimalzeichen '.' Damit ein dt-xl damit rechnen kann habe ich ein .replace(".", ",") eingefügt. Deine Erklärung eben zum Trennzeichen ist mir zu undeutlich.
Mfg

Anzeige
AW: Anzahl Dateien
11.04.2016 17:34:51
Moe
Hi
Die zweite beispielhafte .prn-datei: https://www.herber.de/bbs/user/104899.txt , und hier möchte ich die Spalte "top" kopieren.
die xlsx-datei kann der Wert nur als Zahl formatieren, wenn es das Komma ein "." ist. Also müsste die Zahl 5760,54 so aussehen: 5760.54 und als Zahl eingefügt werden. Geht das?
Gruss,
Moe

AW: VBA Spalten in Textdateien auslesen & einfügen
11.04.2016 18:23:51
Fennek
Hallo,
mit deiner Angaben habe ich immer noch Probleme. Diese Version (2) list alle *.prn Dateieb eines Odners, unterscheidet 2 Arten, q_cool und top, und kopiert die relevanten Spalten.
Arbeitest du mit der englischen Version, also dem DezimalPUNKT? Dann erferne den 'Replace(".", ",") - Befehl.

Sub sMoe()
'Version 2
Dim WBZ As Workbook 'Ziel
Dim WBQ As Workbook 'Quelle
sPfad = "c:\temp\" 'anpassen
'Set WBZ = Workbooks.Open(sPfad & "Moe_Ziel.xlsx")
Set WBZ = ThisWorkbook
sDatei = Dir(sPfad & "*.prn") 'anpassen, z.B. Temperatures.prn
Do Until sDatei = ""
Set WBQ = Workbooks.Open(sPfad & sDatei)
WBQ.Sheets(1).Columns(1).Replace ".", ","
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array( _
13, 1 _
), Array(14, 1)), TrailingMinusNumbers:=True
If Not (Rows("1:1").Find("q_cool")) Is Nothing Then
lrq = WBQ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row
lrz = WBZ.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row + 1
lrz = IIf(lrz > 10, lrz, 10)
WBZ.Sheets(1).Cells(lrz, "A") = WBQ.Name
WBQ.Sheets(1).Range(Cells(1, "D"), Cells(lrq, "D")).Copy WBZ.Sheets(1).Cells(lrz, "D")
WBQ.Sheets(1).Range(Cells(1, "F"), Cells(lrq, "F")).Copy WBZ.Sheets(1).Cells(lrz, "E")
Else
lrz = WBZ.Sheets(1).Cells(Rows.Count, "F").End(xlUp).Row + 1
lrz = IIf(lrz > 10, lrz, 10)
WBZ.Sheets(1).Cells(lrz + 1, "A") = WBQ.Name
WBQ.Sheets(1).Range(Cells(1, "E"), Cells(lrq, "E")).Copy WBZ.Sheets(1).Cells(lrz, "F")
End If
WBQ.Close 0
sDatei = Dir
Loop
'WBZ.Close 1
End Sub
Für heute
mgf

Anzeige
AW: VBA Spalten in Textdateien auslesen & einfügen
12.04.2016 08:06:58
Moe
Hey
Ja, ich arbeite mit dem Dezimalpunkt. Habe das replace esetzt und jetzt funktioniert es einwandfrei. Danke!
Das mit den beiden prn-files klappt noch nicht. Wenn ich den Code so habe, dass es alle prn-files aus dem Ordner öffnet (sDatei = Dir(sPfad & "*.prn"), dann öffnet es TEMPERATURES.prn im Excel, dieses bleibt dann offen und es gibt mit einen Laufzeitfehler bei der Zeile: WBQ.Sheets(1).Range(Cells(1, "E"), Cells(lrq, "E")).Copy WBZ.Sheets(1).Cells(lrz, "F")!?!
In einem Ordner können ca. 20 prn-files sein und davon benötige ich nur etwa 5 (um die gewünschten Spalten auszulesen). Vermutlich ist es schneller, wenn ich die Namen der 5 prn-files angebe, dann muss das Macro weniger Dateien öffnen und schliessen. Was meinst du? Wenn ich meherere prn-Namen einfügen muss, wie kann ich das machen?
Gruss
Moe

Anzeige
AW: VBA Spalten in Textdateien auslesen & einfügen
12.04.2016 09:11:59
Fennek
Hallo Moe,
die Systematik der File-Name und welcher Inhalt in welcher Dateo steht, habe ich nicht so ganz verstanden. Falls du "temperatur.prn" für die Werte 'q_cool' auslesen möchtest, ist es viel besser dies direkt zu machen als über dir(*.prn).
Für 5 Dateien ist auch folgende Konstruktion möglich:
sFiles = array("Datei1", "Datei2", usw bis 5)
For each sDatei in sFiles
'Codes
Next
Dies

AW: VBA Spalten in Textdateien auslesen & einfügen
12.04.2016 09:41:21
Moe
Hoi Fennek
Also hier die Systematik:
Ich habe 20 prn-files in einem Ordner: zwei davon sind "TEMPERATURES.prn" und "ZONE-ENERGY.prn". Aus diesen beiden prn-files möchte ich als Beispiel drei Spalten auslesen: "q_cool", "q_heat" und "top".
Mein Ziel wäre es, dass ich im Macro die Namen der relevanten prn-files eingeben kann (TEMPERATURES.prn;ZONE-ENERGY.prn) und die Spaltennamen (q_cool;q_heat;top), danach kopiert es die Spalten in das aktive Worksheet ab der Zeile D10.
Ich hoffe konnte endlich ein bisschen Klarheit schaffen...!? ;)
Gruss
Moe

AW: VBA Spalten in Textdateien auslesen & einfügen
12.04.2016 14:24:14
Moe
Hallo Fennek
Das mit der Array-Funktion der Dateien habe ich bis jetzt noch nicht hingekriegt. Auch das ich die gewünschten Spalten mit den Namen eingebe, klappt noch nicht. Könntest du mir vielleicht weiterhelfen... ;)
Gruss
Moritz

384 Forumthreads zu ähnlichen Themen


Hallo zusammen!
Ich habe da als blutiger Anfänger in VBA zwei Fragen:
1.) Wie kann ich in meiner Tabelle in jeder zweiten Spalte 4 leere Spalten einfügen lassen?
2.) Dann möchte ich unter den Inhalt der ersten fünf Spalten (A-E) den Inhalt der zweiten 5 Spalten (F-J) usw. In der grö...
Anzeige

Hallo zusammen,
in einer Tabelle mit ~1000 Artikeln in Spalte A stehen jeweils in den Spalten B-M die 12 zum Artikel gehörenden Monatswerte des Verbrauchs.
Ich brauche diese Daten jetzt so angeordnet, dass weiterhin alle Artikel in Spalte A stehen, jedoch die einzelnen Monatswerte unter...

Hallo!
Habe eine Spalte in der Artikelname und Artikelmerkmale, durch drei Punkte getrennt "...", zusammen stehen. Beispiel: Lecker Whisky 21 Jahre ... Lieferung in hochwertiger Schatulle
Wie krieg ich nun den Text links der Punkte in eine extra Spalte und rechts der Punkte in eine extr...
Anzeige

Hallo
ich habe ein Problem. Vielleicht ist es schwierig, vielleicht aber auch nicht.
Ich habe eine Text-Datei mit Spaltentrennzeichen "|" (besser als ";" der Übersichtlichtlichkeit halber) und verschiedenen Längen der Spalten.
Ich will diese in Excel überarbeiten und als Text-Dat...

Hallo zusammen,
ich hab ein wohl eher triviales Problem, komme aber trotzdem einfach nicht weiter.
Ich füge in ein Arbeitsblatt Daten aus einem anderen Programm ein. Jetzt habe ich mehrmals die Funktion 'Text in Spalten' verwendet / ausprobiert, und wenn ich jetzt wieder Daten in A1 ein...

Hallo zusammen,
ich habe ein Makro über den Rekorder aufgezeichnet und versuche es anzupassen. Leider kenn ich mich in der Syntax nicht aus.
Ziel:
In einem markierten Bereich die Zeilen löschen, die in Abhängigkeit von zwei Spalten eine 0 enthalten.
D.h. Spalten X und Y enthalte...
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige