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

Textdatei in Excel einlesen

Textdatei in Excel einlesen
09.02.2009 12:23:40
Horst
Hallo Excel-Gemeinde,
Aus der ersten Zeile einer .txt soll ein Wert in die A.xls eingelesen und mit dem in der letzten Zeile der Spalte AA stehenden Betrag einer B.xls multipliziert werden. In Spalte A der B.xls steht zugleich das aktuelle Systemdatum.
Wie kann man dies per VBA lösen?
Danke vorab für Eure Vorschläge!

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdatei in Excel einlesen
09.02.2009 12:35:00
Oberschlumpf
Hi Horst
Verrätst du uns auch, wie die erste Zeile in der txt-Datei aussieht und um welchen Teil in dieser ersten Zeile es geht?
Ciao
Thorsten
AW: Textdatei in Excel einlesen
09.02.2009 12:43:00
Horst
na klar ;-))
In der .txt-Datei stehen Ausgabewerte eines Statistikprogramms drin. Sie beinhaltet lediglich eine Spalte (nur Zahlen, kein Header). Sieht folgendermaßen aus:
0.097111
0.258623
0.056873
0.480502
0.495862
0.660606
0.582793
0.146433
0.226304
0.387095
...
Unter erster Zeile meine ich in obigen Beispiel den Wert 0.097111.
AW: Textdatei in Excel einlesen
09.02.2009 13:00:00
Tino
Hallo,
hier mal eine Möglichkeit die erste Zeile einer Textdatei zu lesen.
Muss jetzt auf die Mittagschicht und kann erst heute Abend weiter machen.
Sub TestLeseTxT()
Dim sPfad As String
sPfad = Application.GetOpenFilename("Text Files (*.txt), *.txt")

If sPfad <> "" Then
 Range("A1") = LeseZeile1(sPfad)
End If

End Sub


Function LeseZeile1(strPfad As String) As Double
Dim sLine As String
Dim F As Integer
F = FreeFile
    Open strPfad For Input As #F
      Line Input #F, sLine
    Close #F

sLine = Replace(Trim$(sLine), ".", IIf("0.5" * 1 = 1, ".", ","))

If IsNumeric(sLine) Then
 LeseZeile1 = CDbl(sLine)
End If

End Function


Gruß Tino

Anzeige
AW: Textdatei in Excel einlesen
09.02.2009 13:09:39
Horst
Besten Dank vorab!
AW: Textdatei in Excel einlesen
09.02.2009 22:18:00
Horst
kann man die anschließende Multiplikation mit einer externen .xls an das Systemdatum koppeln? Wenn ja, wie?
AW: Textdatei in Excel einlesen
09.02.2009 22:18:00
Horst
kann man die anschließende Multiplikation mit einer externen .xls an das Systemdatum koppeln? Wenn ja, wie?
AW: Textdatei in Excel einlesen
09.02.2009 23:09:54
Tino
Hallo,
teste mal diese Version ob es funktioniert.
Dateipfad, Dateinamen und Tabellennamen musst Du im Code noch anpassen.
Option Explicit

Sub TestLeseTxT()
Dim sFormel As String, sPfad As String
Dim rLetzte As Range
Dim WertAusTxT, WertAusExcel

sPfad = Application.GetOpenFilename("Text Files (*.txt), *.txt")

If sPfad <> "Falsch" Then
 'letzte Zelle in AA 
 Set rLetzte = Cells(Rows.Count, "AA")
 'Pfad, Dateinamen und Tabellennamen anpassen 
 sFormel = "'C:\MeineDatei\[DeineDatei_B.xls]Tabelle1'!" & rLetzte.Address(, , xlR1C1)
 
 WertAusTxT = ExecuteExcel4Macro(sFormel)
 WertAusExcel = LeseZeile1(CStr(sPfad))
 
    If IsNumeric(WertAusTxT) And IsNumeric(WertAusExcel) Then
     Range("A1") = WertAusExcel * WertAusTxT
     Range("B1") = Now
     Range("B1").NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Else
     MsgBox "Die Daten konnten nicht berechnet werden!"
    End If

End If

End Sub


Function LeseZeile1(strPfad As String) As Double
Dim sLine As String
Dim F As Integer
F = FreeFile
    Open strPfad For Input As #F
      Line Input #F, sLine
    Close #F

sLine = Replace(Trim$(sLine), ".", IIf("0.5" * 1 = 1, ".", ","))

If IsNumeric(sLine) Then
 LeseZeile1 = CDbl(sLine)
End If

End Function


Gruß Tino

Anzeige
automatisieren
09.02.2009 23:33:00
Tino
Hallo,
ach so Du willst noch das ganze automatisieren,
dass dies zu einer bestimmten Zeit stattfindet.
Schau Dir mal in der VBA- Hilfe die Application.OnTime an, ist eigentlich alles beschrieben.
Gruß Tino
AW: automatisieren
10.02.2009 17:35:52
Horst
Hi Tino,
Besten Dank fürs erste! Das VBA macht noch nicht ganz das, was es soll. Ich denke Datums- und Datenbereich sind womöglich vertauscht. In der .txt steht in der ERSTEN Zeile der ERSTEN Spalte ein Wert x. Die Euler'sche Zahl hoch diesem (x) soll mit der LETZTEN Zeile der SPALTE AA der externen .xls multipliziert werden. Der Ausgabewert soll optimalerweise als MsgBox ausgegeben werden.
Das Automatisieren zu einer bestimmten Zeit ist nicht unbedingt notwendig. Mir genügt es schon, wenn's über manuelles Starten des Makros funktioniert.
Gruß, horst
Anzeige
AW: automatisieren
10.02.2009 18:08:49
Tino
Hallo,
wie sind die Spalten in der .txt getrennt.
Lade mal ei Beispiel hoch.
Komme erst heute abend dazu, was zu machen.
Gruß Tino
AW: automatisieren
10.02.2009 18:48:00
Horst
Die Spalten sind einfach mit TAB getrennt! Die .txt ist schlicht eine Ausgabedatei eines Statistikprogramms. Normalerweise beinhaltet sie zwei Spalten. Man kann aber auch einstellen, dass überhaupt nur eine Spalte ausgegeben wird. Wichtig ist nur, dass immer die oberste/erste Zeile der .txt eingelesen wird (Header gibt's keinen). Die .txt sieht original so aus:
-0.117698 -0.022290
-0.120929 -0.186268
-0.241870 -0.281091
...
-0.022290 ist der Wert, der aus der .txt ausgelesen werden soll. Alle anderen Werte der .txt sind irrelevant.
Anzeige
AW: automatisieren
10.02.2009 22:53:09
Tino
Hallo,
versuche es mal hiermit.
Option Explicit

Sub TestLeseTxT()
Dim sFormel As String, sPfad As String
Dim rLetzte As Range
Dim WertAusTxT, WertAusExcel

sPfad = Application.GetOpenFilename("Text Files (*.txt), *.txt")

If sPfad <> "Falsch" Then
 'letzte Zelle in AA 
 Set rLetzte = Cells(Rows.Count, "AA")
 'Pfad, Dateinamen und Tabellennamen anpassen 
 sFormel = "'C:\MeineDatei\[DeineDatei_B.xls]Tabelle1'!" & rLetzte.Address(, , xlR1C1)
 
 WertAusExcel = LeseZeile1(CStr(sPfad))
 WertAusTxT = ExecuteExcel4Macro(sFormel)
    
    If IsNumeric(WertAusTxT) And IsNumeric(WertAusExcel) Then
     MsgBox WertAusExcel * WertAusTxT, vbInformation, "Ergebnis"
    Else
     MsgBox "Die Daten konnten nicht berechnet werden!"
    End If

End If
End Sub

Function LeseZeile1(strPfad As String) As Double
Dim sLine As String
Dim F As Integer
F = FreeFile
    Open strPfad For Input As #F
      Line Input #F, sLine
    Close #F

sLine = Replace(sLine, " ", vbTab)
If InStr(sLine, vbTab) > 0 Then
 sLine = Right$(sLine, Len(sLine) - InStr(sLine, vbTab))
End If
sLine = Replace(Trim$(sLine), ".", IIf("0.5" * 1 = 1, ".", ","))

If IsNumeric(sLine) Then
 LeseZeile1 = CDbl(sLine)
End If

End Function


Gruß Tino

Anzeige
AW: automatisieren
11.02.2009 13:59:00
Horst
Hallo Tino!
Wie kann ich bei untenstehenden VBA-Code angeben, dass von der Excel-Datei die Spalte AA jener Zeile A ausgelesen wird, wo das aktuelle Systemdatum steht. Müsste irgenwie mit "Application.Match(CLng(Date)" funktionieren ... Betroffen ist die Zeile: "Set rLetzte = Cells(Rows.Count, "AA")"
Option Explicit

Sub TestLeseTxT()
Dim sFormel As String, sPfad As String
Dim rLetzte As Range
Dim WertAusTxT, WertAusExcel
sPfad = "C:\Dokumente und Einstellungen\User\Desktop\test.txt"
If sPfad  "Falsch" Then
'letzte Zelle in AA
Set rLetzte = Cells(Rows.Count, "AA")
'Pfad, Dateinamen und Tabellennamen anpassen
sFormel = "'C:\Dokumente und Einstellungen\User\Desktop\[B.xls]Tabelle1'!" & rLetzte.Address(,  _
, xlR1C1)
WertAusExcel = LeseZeile1(CStr(sPfad))
WertAusTxT = ExecuteExcel4Macro(sFormel)
If IsNumeric(WertAusTxT) And IsNumeric(WertAusExcel) Then
MsgBox WertAusExcel * Exp(WertAusTxT), vbInformation, "Ausgabewert"
Else
MsgBox "Die Daten konnten nicht berechnet werden!"
End If
End If
End Sub



Function LeseZeile1(strPfad As String) As Double
Dim sLine As String
Dim F As Integer
F = FreeFile
Open strPfad For Input As #F
Line Input #F, sLine
Close #F
sLine = Replace(sLine, " ", vbTab)
If InStr(sLine, vbTab) > 0 Then
sLine = Right$(sLine, Len(sLine) - InStr(sLine, vbTab))
End If
If IsNumeric(sLine) Then
LeseZeile1 = CDbl(sLine)
End If
End Function


Anzeige
AW: automatisieren
11.02.2009 22:43:00
Tino
Hallo,
wo steht jetzt das Datum in Spalte A oder in AA und wo der Wert?
Gruß Tino
AW: automatisieren
12.02.2009 09:50:00
Horst
Hallo Tino,
In der B.xls steht in der Spalte A das Datum und in der Spalte AA der Wert.
Das Auslesen der Textdatei in deinem Code funktioniert super. Lediglich der "WertausExcel" gibt immer 0 aus. Der "Wert aus Excel" soll jenen Wert jener Zeile der Spalte AA annehmen, bei der in Spalte A das Datum (dort stehen nur Datumswerte drin) dem Systemdatum entspricht.
Wäre super wenn du das noch heute hinbekommen würdest!
Besten Dank, Horst
AW: automatisieren
12.02.2009 10:30:00
Tino
Hallo,
dies können wir mit der Sverweis Formel machen.
Sub TestLeseTxT()
Dim sFormel As String, sPfad As String
Dim rLetzte As Range
Dim WertAusTxT, WertAusExcel

'Auswahldialog für Textdatei oder festen Pfad angeben 
sPfad = Application.GetOpenFilename("Text Files (*.txt), *.txt")

If sPfad <> "Falsch" Then
 'letzte Zelle in AA 
 Set rLetzte = Cells(Rows.Count, "AA")
 'Sverweis Formel: Pfad, Dateinamen und Tabellennamen anpassen 
 sFormel = "VLOOKUP(TODAY(),'C:\Neuer Ordner\[Mappe2.xls]Tabelle1'!R1C1:R65536C27,27,FALSE)"
 
 WertAusExcel = ExecuteExcel4Macro(sFormel)
 WertAusTxT = LeseZeile1(sPfad)
    
    If IsNumeric(WertAusTxT) And IsNumeric(WertAusExcel) Then
     MsgBox WertAusExcel * WertAusTxT & Chr(13) & Chr(13) & _
     "Wert aus Textdatei: " & WertAusTxT & Chr(13) & _
     "Wert aus Exceldatei: " & WertAusExcel, vbInformation, "Ergebnis"
    Else
     MsgBox "Die Daten konnten nicht berechnet werden!"
    End If
End If
End Sub

Function LeseZeile1(strPfad As String) As Double
Dim sLine As String
Dim F As Integer
F = FreeFile
    Open strPfad For Input As #F
      Line Input #F, sLine
    Close #F

sLine = Replace(sLine, " ", vbTab)
If InStr(sLine, vbTab) > 0 Then
 sLine = Right$(sLine, Len(sLine) - InStr(sLine, vbTab))
End If
sLine = Replace(Trim$(sLine), ".", IIf("0.5" * 1 = 1, ".", ","))

If IsNumeric(sLine) Then
 LeseZeile1 = CDbl(sLine)
End If

End Function


Gruß Tino

Anzeige
AW: automatisieren
12.02.2009 10:57:00
Horst
Hallo Tino!
Ich habe jetzt meine Verknüpfungen angepasst, den Code ausprobiert und was soll ich sagen: Funktioniert HERVORRAGEND! EINFACH SUPER! Die Idee mit dem SVerweis war genial!
Verräts du mir noch, welche Funktion die folgenden Zeilen haben: Was macht z.B das CDbl?
sLine = Right$(sLine, Len(sLine) - InStr(sLine, vbTab))
If IsNumeric(sLine) Then
LeseZeile1 = CDbl(sLine)
End If
Nochmals allerbesten Dank! Bist du öfter hier im Forum oder machst du vielleicht auch Auftragsprogrammierung?
AW: automatisieren
12.02.2009 12:21:00
Tino
Hallo,
sLine = Right$(sLine, Len(sLine) - InStr(sLine, vbTab))
Du wolltest den zweiten Wert aus der Zeile, mit dieser Zeile mach ich dies.
If IsNumeric(sLine) Then
LeseZeile1 = CDbl(sLine)
End If

Zuerst prüfe ich ob der String eine Zahl ist,
danach wandle ich diese String in einen Wert vom Typ Double um,
damit man besser rechnen kann.
Gruß Tino
Anzeige
AW: Textdatei in Excel einlesen
09.02.2009 14:29:00
GraFri
Hallo
Schritt 2 - Wert aus Arbeitsmappe

Sub ExternerWert()
Dim strPfad$, strDateiName, strTabelle$, strBezug$, strResultat$, strArg$
Dim xZahl As Single
Application.ScreenUpdating = False
' Aus der geschlossenen Arbeitsmappe C:\TMP\Test.xls
' wird die Zelle AA2 als String eingelesen
strPfad = "C:\TMP\"
strDateiName = "Test.xls"
strTabelle = "Tabelle1"
strBezug = "$AA$2"
' Externen Bezug zur Abfrage zusammensetzen
strArg = "'" & strPfad & "[" & strDateiName & "]" & strTabelle & _
"'!" & Range(strBezug).Range("A1").Address(, , xlR1C1)
' XLM-Makro ausfuehren
strResultat = ExecuteExcel4Macro(strArg)
' in Zahl umwandeln
xZahl = CSng(Trim(strResultat))
Application.ScreenUpdating = True
End Sub


mfg, GraFri

Anzeige
AW: Textdatei in Excel einlesen
09.02.2009 15:30:00
Horst
Hallo allseits,
es müsste aus der geschlossenen Arbeitsmappe C:\TMP\Test.xls nicht die Zelle AA2 ausgelesen werden, sondern die letzte Zeile der Spalte AA; dies ist genau jene Zeile, wo in Spalte A das aktuelle Systemdatum drin steht. Wie müsste ich den VBA-Code ändern?

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige