Excel データを使用してテキスト ファイルを編集したいです。テキスト ファイルの形式は次のとおりです。
Data1, Number1, Number2, ..., etc.
Number1
合計値(Number1+Excelデータ)を取得して置換したいです。Number2
同じフローです。
これを行う最善の方法は何ですか?
答え1
このサンプルはテキストファイルを読み込み、コンマ間のすべての値を取得し、セルA1の値と合計します。100
入力ファイル(C:\test.txt)
data1,1,2,3,4,5
data2,1,2,3,4,5
Excelデータ(シート1)
[A1] = 100
コード
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
出力(VBA エディター » イミディエイト ウィンドウ)
101
102
103
104
105
201
202
203
204
205
答え2
次のコードで、希望どおりに Number1 と Number2 の値を取得しました。
入力ファイル (C:\intest.txt)
Data1, 1, 2, ...etc
Data2, 3, 4, ...etc
...
Data100, 200, 300, ...etc
Excelデータ(シート1)
[A1] = 100, [B1] = 200
[A2] = 300, [B2] = 400
...
[A100] = 2000, [B100] = 3000
コード
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
出力ファイル (C:\outtest.txt)
Data1, 101, 202, ...etc
Data2, 303, 404, ...etc
...
Data100, 2200, 3300, ...etc