PDA

Vollständige Version anzeigen : TXT über VBA einlesen


Daniel1983
25.03.2009, 12:17
Hallo zusammen
bin neu hier.

ich möchte in Excel eine Datei öffnen und dort die Daten auslesen diese dann in eine Excel Tabelle schreiben

die Datei sieht so aus.

0103473SE88 510076,998 430017,360 334,5104 801 3679
0103474SE88 510111,303 430002,248 333,7854 801 3679
0103475SE88 510142,420 429977,562 333,4914 801 3679
0103476SE88 510167,517 429962,377 333,1466 812 3679
0103477SE88 510157,849 429946,622 333,1531 812 3679
0103478SE88 510214,205 429912,708 333,1448 812 3679
0103479SE88 510280,554 429829,681 334,9436 801 3679
0103480SE88 510204,333 429952,224 339,3359 811 3679




die Zeilen wiederholen sich, jedoch unterschiedlich viele Zeilen

wie kann ich die Datei am einfachsten einlesen.

Danke Daniel

IngGi
25.03.2009, 14:51
Hallo Daniel,

folgendes Makro kommt entweder in ein allgemeines Modul, dann werden die Daten in das aktive Tabellenblatt eingefügt, oder du platzierst es in das Modul eines Tabellenblattes, dann werden die Daten in dieses Tabellenblatt eingefügt - unabhängig davon, welches Tabellenblatt gerade aktiv ist.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
&nbsp;
<span class="TOKEN">Sub</span> Daten_Lesen()
&nbsp;
<span class="TOKEN">Dim</span> strZeile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> vntArray <span class="TOKEN">As</span> Variant
<span class="TOKEN">Dim</span> intFF <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> rng <span class="TOKEN">As</span> Range
&nbsp;
<span class="REM">'Obere linke Zelle des Einf&uuml;gebereiches merken</span>
<span class="TOKEN">Set</span> rng = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
<span class="REM">'Freie Kanalnummer ermitteln</span>
intFF = FreeFile
&nbsp;
<span class="REM">'Kanal zu Textdatei &ouml;ffnen</span>
<span class="TOKEN">Open</span> &quot;C:\Temp\Test.txt&quot; <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #intFF <span class="REM">'Pfad und Dateiname anpassen !</span>
<span class="REM">'Bis Dateiende zeilenweise abarbeiten</span>
<span class="TOKEN">Do</span> <span class="TOKEN">Until</span> EOF(intFF)
<span class="REM"> 'N&auml;chste Zeile in Variable strZeile einlesen</span>
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #intFF, strZeile
<span class="REM"> 'Zeile auf Spalten aufgeteilt in Array schreiben</span>
vntArray = Split(strZeile, &quot; &quot;)
<span class="REM"> 'Daten in n&auml;chste freie Zeile einf&uuml;gen</span>
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, <span class="TOKEN">UBound</span>(vntArray) + 1) = vntArray
<span class="TOKEN">Loop</span>
<span class="REM">'Kanal zu Textdatei schlie&szlig;en</span>
<span class="TOKEN">Close</span> #intFF
&nbsp;
<span class="REM">'Variable rng auf gesamten Einf&uuml;gebereich erweitern</span>
<span class="TOKEN">Set</span> rng = Range(rng, Cells(Rows.Count, 1).End(xlUp).Offset(0, <span class="TOKEN">UBound</span>(vntArray)))
<span class="REM">'Daten im Einf&uuml;gebereich in richtige Zahlen umwandeln</span>
rng.Value = rng.Value
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

Daniel1983
25.03.2009, 16:33
Das ist schon super!!!!!

nun müsste ich noch die einzelnen Werte in einzelne Variablen speichern da ich diese noch prüfen und editieren möchte.

Gruß Daniel

IngGi
25.03.2009, 17:03
Hallo Daniel,

in der Do...Loop-Schleife werden die Daten zeilenweise eingelesen. Nach der Codezeile
vntArray = Split(strZeile, " ")
stehen die Daten der aktuellen Zeile im Variant-Datenfeld vntArray. Von dort können sie über den Index ausgelesen werden. Also
<table><tr style="vertical-align:top; text-align:center; "><tr><td>&nbsp;</td></tr><tr><td><table border=0 cellspacing=0 cellpadding=0 style="font-family:Arial,Arial; font-size:10pt; padding-left:2pt; padding-right:2pt; "> <style type = "text/css"> th {font-weight:normal} </style> <colgroup><col width=92.999997675 ><col width=53.99999865 ><col width=141.99999645 ></colgroup><tr height=19><td style="font-size:11pt; ">vntArray(0)</td><td style="font-size:11pt; ">==&gt;</td><td style="font-size:11pt; ">Daten f&uuml;r Spalte A</td></tr><tr height=19><td style="font-size:11pt; ">vntArray(1)</td><td style="font-size:11pt; ">==&gt;</td><td style="font-size:11pt; ">Daten f&uuml;r Spalte B</td></tr><tr height=19><td style="font-size:11pt; ">vntArray(2)</td><td style="font-size:11pt; ">==&gt;</td><td style="font-size:11pt; ">Daten f&uuml;r Spalte C</td></tr><tr height=19><td style="font-size:11pt; ">usw.</td><td style="font-size:11pt; "></td><td style="font-size:11pt; "></td></tr></table></td></tr><tr><td>&nbsp;</td></tr></tr></table>Gruß Ingolf

Daniel1983
25.03.2009, 17:19
Gut das wollte ich so machen.
Hätte auch so geklappt

Bloß leider habe ich gerade festgestellt das ich verschieden Anzahl von Leerzeichen habe.

Kann ich nicht auch die txt Datei so auslesen das ich sage die ersten 8 Zeichen sind Punktnummer die Zeichen 10 bis 16 ist der Hochwert und so weiter. Das wäre das beste für mich da ich auch Zeilen habe wo Zeichen fehlen

Daniel1983
25.03.2009, 19:21
Danke habe gerade selbst herausgefunden

mit (mid)