Excel 2007: Zahlen aus txt-File in Excel übertragen

Mira2011

Cadet 3rd Year
Registriert
Juni 2011
Beiträge
48
Hallo Leute!

Ich würde gerne Zahlen aus txt-Dateien in Excel übertragen, im txt-File liegen die Daten folgendermaßen vor:

Code:
Weg [  mm];Kraft [   N];Time Offset [s]
[DATA]
1.0;-0.5; 2.046
2.0;1.6; 2.899
3.0;3.7; 3.100
4.0;5.8; 3.204
5.0;7.9; 3.326
6.0;10.0; 3.432
7.0;12.1; 3.533
8.0;14.2; 3.614
10.0;11.8; 3.710
11.0;16.0; 3.711
12.0;21.8; 3.711
13.0;27.4; 3.712
14.0;29.9; 3.712

In Excel soll je eine Spalte für Weg, Kraft und Time Offset angelegt werden (Bild im Anhang). Kann man das irgendwie über ein Skript/Makro whatever realisieren? Ich hab von sowas leider keine Ahnung und wäre daher für Tipps dankbar :)
 

Anhänge

  • excel.PNG
    excel.PNG
    3,7 KB · Aufrufe: 155
Das kannst du ganz einfach mit VBA machen, hier ein Vorschlag:

Code:
Sub Import()
    Dateiname = Application.GetOpenFilename("Textdateien (*.txt), *.txt") [COLOR="Red"]'falls du noch mehr Dateiendungen bei der Abfrage zulassen willst, dann hier rein damit
                                                                          'zum Beispiel ALLE DATEIEN: Alle Dateien (*.*),*.*[/COLOR]
    If Dateiname = "Falsch" Then Exit Sub
    
    Startzeile = 2 [COLOR="Red"]'hier kannst du die Startzeile natürlich noch anpassen[/COLOR]
    Startspalte = 2[COLOR="Red"] 'die Spalte ebenfalls[/COLOR]
    Zieltabelle = "Tabelle1"
    
    Open Dateiname For Input As #1
    Do While Not EOF(1)
        Line Input #1, s
        Wert1 = strParse(s, ";", 1)
        Wert2 = strParse(s, ";", 2)
        Wert3 = strParse(s, ";", 3)
        With Sheets(Zieltabelle)
            .Cells(Startzeile, Startspalte) = Wert1
            .Cells(Startzeile, Startspalte + 1) = Wert2
            .Cells(Startzeile, Startspalte + 2) = Wert3
        End With
        Startzeile = Startzeile + 1
    Loop
    Close #1
End Sub

Public Function strParse(ByVal strText As String, ByVal Trennzeichen As String, ByVal Position As Integer) As String
    Dim posStart, posStop, lenCar As Integer
    posStart = 1
    Do While Position > 1
        posStart = InStr(posStart, strText, Trennzeichen) + 1
        Position = Position - 1
    Loop
    posStop = InStr(posStart, strText, Trennzeichen)
    strParse = Mid(strText, posStart, IIf(posStop = 0, Len(strText) + 1, posStop - posStart))
End Function

--> Liest dir alle Werte aus der TXT aus und beginnt sie bei Position (2,2) der Reihe nach einzufügen, probiers aus!

P.S. Welche Exel-Version benutzt du?
 
Wow, ich hatte jetzt nicht damit gerechnet, dass mir jemand gleich ein ganzes Script schreibt! Tausend Dank dafür! :)

Hab die 2007er Version. Ich werde es heute abend mal ausprobieren.
 
Kann Excel aber auch von sich aus, gehst du auf Daten und dann auf "aus Text".

Eleganter ist das Script natürlich schon !
 
Hi!
Habe eine sehr ähnliches Problem. Hoffe mir kann jemand dabei helfen. :)

Ich muss ein Log File in Excel übertragen. Die ersten Zeilen des Makros bis Zeile 10 (siehe oben) hab ich passend angepasst (Log File statt txt und andere Zeilen und Spaltenbeginn).
Aber ab da versteh ich das nicht mehr...

Und ich hab folgende Struktur im Log File:
Code:
...
11.05.2012-19:32:40 - -> beliebiger Text
11.05.2012-19:32:40 - <- X: 129.599249 Y: 162.193494 W: -1.566359
11.05.2012-19:32:40 - beliebiger Text
...
11.05.2012-19:32:42 - <- X: 129.609115 Y: 162.187386 W: -1.566789
...

Es soll also die Zeilen mit den X: Y: und W: gesucht werden und nur diese Zeilen sollen importiert werden.
Und zwar:
1. Spalte Datum,
2. Spalte den Wert nach X:
3. Spalte den Wert nach Y:
4. Spalte den Wert nach W:

Infos: Datum hat immer die gleiche Zeichenlänge. Und die Werte sind immer mit X: Y: und W: gekennzeichnet und die Werte haben immer die gleiche Zeichenlänge.

Wäre echt super wenn mir jemand bei den Problem helfen könnte! :)
 
Du musst ja deinen String auch anders zerteilen. Du hast schließlich kein Semikolon als Trennzeichen
--> Anmerkung: Der obige Fall hätte auch einfach als CSV in Excel geöffnet werden können.

Für held:
Code:
Sub Schaltfläche1_BeiKlick()
    Dateiname = Application.GetOpenFilename("Testlog (*.txt), *.txt") 'falls du noch mehr Dateiendungen bei der Abfrage zulassen willst, dann hier rein damit
    'zum Beispiel ALLE DATEIEN: Alle Dateien (*.*),*.*
    If Dateiname = "Falsch" Then Exit Sub
    Startzeile = 2 'hier kannst du die Startzeile natürlich noch anpassen
    Startspalte = 2 'die Spalte ebenfalls
    Zieltabelle = "Tabelle1"
    Open Dateiname For Input As #1
    Do While Not EOF(1)
    Line Input #1, s
    If Mid(s, 26, 3) <> "X: " Then GoTo 1:
    Wert1 = Left(s, 19)
    Wert2 = Mid(s, 29, 10)
    Wert3 = Mid(s, 43, 10)
    Wert4 = Mid(s, 57, 9)
    With Sheets(Zieltabelle)
    .Cells(Startzeile, Startspalte) = Wert1
    .Cells(Startzeile, Startspalte + 1) = Wert2
    .Cells(Startzeile, Startspalte + 2) = Wert3
    .Cells(Startzeile, Startspalte + 3) = Wert4
    End With
    Startzeile = Startzeile + 1
1:  Loop
    Close #1
    End Sub

Sofern natürlich die Zeilen immer die gleiche Länge haben. Mid schneidet nämlich einfach den String bei der angegebenen Stelle aus.
 
Vielen Dank schonmal! :)

Aber leider wird nichts importiert...

Scheint, dass die Bedingung wann er eine Zeile einlesen soll falsch ist oder?

Oder liegt es an "if Dateiname=falsch= exit Sub"
Ich hab oben folgendes:
Code:
Dateiname = Application.GetOpenFilename("log files (*.log), *.log") 'falls du noch mehr Dateiendungen bei der Abfrage zulassen willst, dann hier rein damit
    'zum Beispiel ALLE DATEIEN: Alle Dateien (*.*),*.*
    If Dateiname = "Falsch" Then Exit Sub

Bein Einzelschrittdebug steigt er nach der Dateiwahl schon aus.
 
Zuletzt bearbeitet:
Also ein Test mit deinen Beispielzeilen klappt bei mir (office 2003). Und "log files (*.log), *.log" ist eigentlich auch ok, sofern dies natürlich auch die Dateiendung ist.
 
Jetzt funktionierts! Keine Ahnung was ich falsch hatte. Aber jetzt läufts!
Vielen Vielen Dank @simpsonsfan (und cosmos321)

Aber eine Frage hätte ich noch:
Und zwar ist der Winkel im Logfile als Bogenmaß angegeben und ich möchte in der Excel Tabelle nach dem Einlesen direkt Grad haben.
Hab gelesen, dass man das so machen kann:

Code:
Application.WorksheetFunction.Degrees(Wert4)

Allerdings erhalte ich dann einen Winkel von
89745759,9023321

richtig ist aber 89,745...

Ich hab gelesen, dass die Variable eine Double und keine Integer sein muss. Kann das sein und kann ich das irgendwie ändern?
 
Zuletzt bearbeitet:
Bogenmaß in Grad: Bogenmaß / 2π * 360 oder dein Wert (89.745.759) / 1.000.000.
 

Ähnliche Themen

Zurück
Oben