'
'******** AKIRA55.COM ******* https://akira55.com/textfiles/
'
Sub TextFiles01() '連番(複数)のテキストファイルを合計ファイルに纏める
Dim FilePath, SetFilePath, FileNo, txtLine As String
Dim I, L, M, lRow As Long
FilePath = "C:\TEST\sample" 'ファイルパスとファイル名を指定します。
Cells.ClearContents 'テキストファイルを取り込むシートをクリアー
For L = 1 To 99 'テキストファイルを取り込む最大値を指定(ファイル名の連番1~99まで)
FileNo = Format(Str(L), "00") 'ファイル名に連番を付け足します。
SetFilePath = FilePath & FileNo & ".txt" 'テキストファイルを取り込むフルパスを指定します。①
If Dir(SetFilePath) = "" Then '読み込むテキストファイルを取り込むがなくなるまで繰り返します。
GoTo DSave '読み込むファイルがなくなれば、Dsave (テキストデータの保存へ)
End If
Open SetFilePath For Input As #1 '①のテキストファイルを指定したフルパスからファイルを開きます
Line Input #1, txtLine 'データをTxtLineへ代入します。
lRow = Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の最終行+1をlRowに代入
For M = 1 To lRow 'A列の最終行まで繰り返す。
If Cells(M, "A") = "" Then '初めての名前が発生した場合
Cells(M, "A") = Left(txtLine, 2) '読み込んだデータを名前と点数に分割します。(名前をA列)
Cells(M, "B") = Val(Right(txtLine, 2)) '読み込んだデータを名前と点数に分割します。(点数をB列)'
Exit For
End If
If Cells(M, "A") = Left(txtLine, 2) Then '既存の名前がある場合
Cells(M, "B") = Cells(M, "B") + Val(Right(txtLine, 2)) 'B列の点数を加算します。
Exit For
End If
Next M
Close #1 '読み込んだテキストファイルを閉じます。
Next L
DSave: '合計ファイルをテキストファイルに書き出します。
Open FilePath & "合計.txt" For Output As #1 '合計ファイルを出力設定します。(フルパス指定)
I = 1 'データの一件目から出力
Do While Cells(I, "A") <> "" '出力するデータがなくなるまで1行単位で繰り返します。
Cells(I, "B") = Cells(I, "B") & "点" 'B列の加算して合計値に”点”文字列を結合します。
Print #1, Cells(I, "A") & " " & Cells(I, "B") 'テキストデータとして、A列とB列を結合して出力します。
I = I + 1 '行を加算します。
Loop
Close #1 '合計ファイルを閉じて保存します。
End Sub
'
'
'******** AKIRA55.COM ******* https://akira55.com/textfiles/
'
Sub TextFiles02() 'ダイアログボックスで複数選択したテキストファイルを合計ファイルに纏める
Dim FileList As Variant
Dim FilePath, SetFilePath, FileNo, txtLine As String
Dim I, L, M, lRow As Long
Cells.ClearContents 'テキストファイルを取り込むシートをクリアー
FileList = Application.GetOpenFilename(FileFilter:="テキストファイル(*.txt),*.txt", MultiSelect:=True)
If VarType(FileList) = vbBoolean Then 'テキストファイルを選択していなければ、プログラム終了
Exit Sub
End If
For I = 1 To UBound(FileList) '選択したテキストファイルの全ファイル繰り返します。
SetFilePath = FileList(I) 'テキストファイルを取り込むフルパスを指定します。
Open SetFilePath For Input As #1 '①のテキストファイルを指定したフルパスからファイルを開きます
Line Input #1, txtLine 'データをTxtLineへ代入します。
lRow = Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の最終行+1をlRowに代入
For M = 1 To lRow 'A列の最終行まで繰り返す。
If Cells(M, "A") = "" Then '初めての名前が発生した場合
Cells(M, "A") = Left(txtLine, 2) '読み込んだデータを名前と点数に分割します。(名前をA列)
Cells(M, "B") = Val(Right(txtLine, 2)) '読み込んだデータを名前と点数に分割します。(点数をB列)'
Exit For
End If
If Cells(M, "A") = Left(txtLine, 2) Then '既存の名前がある場合
Cells(M, "B") = Cells(M, "B") + Val(Right(txtLine, 2)) 'B列の点数を加算します。
Exit For
End If
Next M
Close #1 '読み込んだテキストファイルを閉じます。
Next I
DSave: '合計ファイルをテキストファイルに書き出します。
Open FilePath & "合計.txt" For Output As #1 '合計ファイルを出力設定します。(フルパス指定)
I = 1 'データの一件目から出力
Do While Cells(I, "A") <> "" '出力するデータがなくなるまで1行単位で繰り返します。
Cells(I, "B") = Cells(I, "B") & "点" 'B列の加算して合計値に”点”文字列を結合します。
Print #1, Cells(I, "A") & " " & Cells(I, "B") 'テキストデータとして、A列とB列を結合して出力します。
I = I + 1 '行を加算します。
Loop
Close #1 '合計ファイルを閉じて保存します。
End Sub
’