Ich möchte eine Textdatei mit Excel-Daten bearbeiten. Die Textdatei hat folgende Form:
Data1, Number1, Number2, ..., etc.
Ich möchte Number1
den Summenwert (Zahl1 + Excel-Daten) abrufen und ersetzen. Number2
Dies ist auch der gleiche Ablauf.
Wie geht man dabei am besten vor?
Antwort1
Dieses Beispiel liest eine Textdatei ein, holt alle Werte zwischen Kommas und summiert sie mit dem Wert der Zelle A1100
Eingabedatei(C:\test.txt)
data1,1,2,3,4,5
data2,1,2,3,4,5
Excel-Daten(Blatt1)
[A1] = 100
Code
Sub ReadCommas()
strPath = "C:\test.txt"
Dim arVal() As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.OpenTextFile(strPath)
Do While Not objFile.AtEndOfStream
strLine = objFile.ReadLine
arVal = Split(strLine, ",")
For i = 1 To UBound(arVal)
arVal(i) = Val(arVal(i)) + Sheets(1).Cells(1, 1)
Debug.Print arVal(i)
Next i
Loop
objFile.Close
End Sub
Ausgabe(VBA-Editor » Direktfenster)
101
102
103
104
105
201
202
203
204
205
Antwort2
Ich habe die Werte Number1 und Number2 wie gewünscht mit dem folgenden Code erhalten:
Eingabedatei (C:\intest.txt)
Data1, 1, 2, ...etc
Data2, 3, 4, ...etc
...
Data100, 200, 300, ...etc
Excel-Daten (Tabelle 1)
[A1] = 100, [B1] = 200
[A2] = 300, [B2] = 400
...
[A100] = 2000, [B100] = 3000
Code
Sub ButtonClick()
strPath = "C:\intest.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.OpenTextFile(strPath)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
'※1 means Start Position of Num1
intNum1Cnt = (InStr(※1, strLine, ",")) - ※1 'Count of Number1 of Data1:1
dblNum1 = Mid(strLine , ※1, intNum1Cnt ) 'Value of Number1 of Data1:1
dblExcelNum1 = GetValue1() 'Value of [A1]:100
dblSumNum1 = dblNum1 + dblExcelNum1 'Sum:101
'Replace dblSumNum1 to dblNum1 in OutputFile
'※2 means Start Position of Num2
※2 = ※1 + intValue1Cnt + 1
intNum2Cnt = InStr(※2, strLine, ",") - ※2 'Count of Number2 of Data1:1
dblNum2 = Mid(strLine, ※2, intNum2Cnt) 'Value of Number2 of Data1:2
dblExcelNum2 = GetValue2() 'Value of [B1]:200
dblSumNum2 = dblNum2 + dblExcelNum2 'Sum:202
'Replace dblSumNum2 to dblNum2 in OutputFile
Loop
objFile.Close
End Sub
Function GetValue1() As Double
For i = 1 To 100
strCellValue1 = Sheets(1).Cells(i, 1).Value
GetValue1 = CDbl(strCellValue1)
Next i
End Function
Function GetValue2() As Double
For j = 1 To 100
strCellValue2 = Sheets(1).Cells(j, 2).Value
GetValue2 = CDbl(strCellValue2)
Next j
End Function
Ausgabedatei (C:\outtest.txt)
Data1, 101, 202, ...etc
Data2, 303, 404, ...etc
...
Data100, 2200, 3300, ...etc