Supportnet / Forum / Tabellenkalkulation
dateiimport in excel ueber macro
Frage
hallo zusammen!
ich moechte ueber ein makro in excel daten aus einer .txt-datei in ein worksheet importieren, um anschliessend ein diagramm aus diesen daten zu erstellen.
in der einzulesenden datei stehen aber neben den spaltenweisen daten auch noch irgendwelche kommentare. meine frage daher: wie kann ich zeilen ueberlesen?
phil
Antwort 1 von CaroS
Hallo graulila,
gibt es denn eine Möglichkeit, die Zeilen, die eingelesen werden sollen, von den Zeilen, die nicht eingelesen werden sollen, sicher und zuverlässig zu unterscheiden?
Man könnte auf zwei verschiedene Arten vorgehen:
1. Wenn es sinnvoll ist, den Textkonvertierungsassistenten zu nutzen, dann erst alle Zeilen der Textdatei (mit Hilfe eines "Importbefehls" und des Textkonvertierungsassis-tenten) importieren und anschließend die Kommentarzeilen per Makro wieder löschen. Oder
2. die Textdatei Zeile für Zeile lesen, nur die gewünschten Zeilen importieren, dabei aber die Aufteilung der Daten auf die Spalten und eventuelle Konvertierungen usw. (das was sonst der Textkonvertierungsassistent machen würde) selbst programmieren.
Wie man sich da am besten entscheidet hängt wohl vor allem vom Umfang und der Kompliziertheit der zu importierenden Daten ab.
Gruß,
CaroS
gibt es denn eine Möglichkeit, die Zeilen, die eingelesen werden sollen, von den Zeilen, die nicht eingelesen werden sollen, sicher und zuverlässig zu unterscheiden?
Man könnte auf zwei verschiedene Arten vorgehen:
1. Wenn es sinnvoll ist, den Textkonvertierungsassistenten zu nutzen, dann erst alle Zeilen der Textdatei (mit Hilfe eines "Importbefehls" und des Textkonvertierungsassis-tenten) importieren und anschließend die Kommentarzeilen per Makro wieder löschen. Oder
2. die Textdatei Zeile für Zeile lesen, nur die gewünschten Zeilen importieren, dabei aber die Aufteilung der Daten auf die Spalten und eventuelle Konvertierungen usw. (das was sonst der Textkonvertierungsassistent machen würde) selbst programmieren.
Wie man sich da am besten entscheidet hängt wohl vor allem vom Umfang und der Kompliziertheit der zu importierenden Daten ab.
Gruß,
CaroS
Antwort 2 von graulila
danke fuer die hilfe. hat soweit jetzt auch geklappt.
jetzt habe ich die daten eingelsen und um sie weiterverarbeiten zu koennen, muesste ich zumindest die anzahl der eingelesenen zeilen ermitteln. wie kann ich das machen?
gruß graulila
jetzt habe ich die daten eingelsen und um sie weiterverarbeiten zu koennen, muesste ich zumindest die anzahl der eingelesenen zeilen ermitteln. wie kann ich das machen?
gruß graulila
Antwort 3 von CaroS
Hallo graulila,
da die Daten beim Einlesen ja eigentlich immer (mindestens) in die Spalte A geschrieben werden, könntest Du mit einer einfachen Matrixformel ermitteln, welche die letzte benutzte Zeile in der Spalte ist. Und wenn die Tabelle vorher leer war, ist das gleichzeitig die Anzahl der eingelesenen Zeilen.
Gebe in eine beliebige leere Zelle die Formel
=INDIREKT("A" & MAX(NICHT(ISTLEER(A1:A65535)) * ZEILE(1:65535)))
ein und schließe die Eingabe mit Strg+Umsch+Eingabe ab. Natürlich kann man die Formeln leicht für andere Spalten anpassen, indem man anstelle der 3 A´s eine andere Spaltenbezeichnung verwendet.
Man kann das alles (und noch viel mehr) auch mit VBA machen, aber wenn´s nur um die Zeilenzahl geht, reicht das völlig.
Gruß,
CaroS
da die Daten beim Einlesen ja eigentlich immer (mindestens) in die Spalte A geschrieben werden, könntest Du mit einer einfachen Matrixformel ermitteln, welche die letzte benutzte Zeile in der Spalte ist. Und wenn die Tabelle vorher leer war, ist das gleichzeitig die Anzahl der eingelesenen Zeilen.
Gebe in eine beliebige leere Zelle die Formel
=INDIREKT("A" & MAX(NICHT(ISTLEER(A1:A65535)) * ZEILE(1:65535)))
ein und schließe die Eingabe mit Strg+Umsch+Eingabe ab. Natürlich kann man die Formeln leicht für andere Spalten anpassen, indem man anstelle der 3 A´s eine andere Spaltenbezeichnung verwendet.
Man kann das alles (und noch viel mehr) auch mit VBA machen, aber wenn´s nur um die Zeilenzahl geht, reicht das völlig.
Gruß,
CaroS
Antwort 4 von JoeKe
Hallo,
wenn die Daten von a1-a? eingelesen werden und es nur um die Anzahl der Zeilen geht, sollte doch =Anzahl2(a:a) genügen!?
Gruß
JöKe
wenn die Daten von a1-a? eingelesen werden und es nur um die Anzahl der Zeilen geht, sollte doch =Anzahl2(a:a) genügen!?
Gruß
JöKe
Antwort 5 von CaroS
Hallo JöKe,
ja da hast Du eigentlich Recht, da habe ich einfach ein bisschen zu kompliziert gedacht. Als Gesamtergebnis kommt quasi dasselbe raus, nur mit einer viel einfacheren Formel.
Irgendwie hatte ich vorher gerade was mit .End(xlUp) gemacht, wollte nun aber VBA möglichst vermeiden und bin dann nur auf sowas gekommen.
Schönes Wochenende!
CaroS
ja da hast Du eigentlich Recht, da habe ich einfach ein bisschen zu kompliziert gedacht. Als Gesamtergebnis kommt quasi dasselbe raus, nur mit einer viel einfacheren Formel.
Irgendwie hatte ich vorher gerade was mit .End(xlUp) gemacht, wollte nun aber VBA möglichst vermeiden und bin dann nur auf sowas gekommen.
Schönes Wochenende!
CaroS
Antwort 6 von Graulila
Vielen Dank fuer die hilfreichen Tipps!
Ich habe das jetzt auch so weit hinbekommen. Das einzige Problem besteht jetzt noch darin, dass ich normalerweise in meiner Eingabedatei nicht nur einen Datensatz habe, sondern mehrere, die durch eine Zeichen (z.Bsp. ein "#") getrennt sind. Also etwa von der Form:
datensatz1
...
#
datensatz2
...
#
datensatz3
...
ENDE Datei
Meine Frage daher: kann ich per VBA irgendwie sagen: Lese die Daten ein bis ein "#" kommt oder ähnliches?
Ich habe das jetzt auch so weit hinbekommen. Das einzige Problem besteht jetzt noch darin, dass ich normalerweise in meiner Eingabedatei nicht nur einen Datensatz habe, sondern mehrere, die durch eine Zeichen (z.Bsp. ein "#") getrennt sind. Also etwa von der Form:
datensatz1
...
#
datensatz2
...
#
datensatz3
...
ENDE Datei
Meine Frage daher: kann ich per VBA irgendwie sagen: Lese die Daten ein bis ein "#" kommt oder ähnliches?