VBA を使用して 2 つのカンマ間の値を取得する

VBA を使用して 2 つのカンマ間の値を取得する

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

関連情報