前提・実現したいこと
VBA初心者です。
VBAで、フォルダ内にあるテキストファイルをすべて読みこんで、
1つのエクセルシートにまとめようとしています。
下記に読みこもうとしているテキストファイルのイメージを示します(テスト用)
- タブで区切られています
- 被験者の人数分あります(実際は30個ほど。テスト用としては3個作成)。
- 中身は、各ファイル1行でデータ数(列数)は固定です
発生している問題・エラーメッセージ
フォルダ内の全てのファイルを読みこみたいのに
1つのファイルしか読みこめていない。
追記
自己解決しました
期待する実行結果
実際の実行結果
2行目・3行目にも同じデータを記述してしまっています。
Debug.printで見るとすべてのファイル名がでてくるのですが
実際に読みこんでいるのは、1つのファイルだけのようです。
追記 Debug.printでFilePathを調べたところ、変化していないことが分かりました。
該当のソースコード
VBA
1Option Explicit 2 3Sub Txt2Excel() 4 5' マージするテキストファイルを集めたフォルダーを指定 6 Dim FileFolder As String 7 FileFolder = ThisWorkbook.Path & "\txt" 8 9 10' そのフォルダー内のテキストファイルの名前を取得 11 Dim FileName As String 12 FileName = Dir(FileFolder & "*.txt ") 13 14 Dim FilePath As String 15 FilePath = FileFolder & "\" & FileName 16 17 Dim Buffer As String '一時的に文字列を格納する 18 19 Dim A As Variant '文字列格納用配列 20 ReDim B(99, 99) '文字列格納用配列 21 Dim i As Long 22 i = 0 23 Dim j As Long 24 j = 0 25 26 27 28 '使用可能なファイル番号を取得 29 Dim FileNumber As Long 30 FileNumber = FreeFile 31 32 'フォルダ内のすべてのテキストファイルを処理する 33 Do Until FileName = "" 34 Open FilePath For Input As #FileNumber 35 Debug.Print FileName 36 37 38 Do While Not EOF(FileNumber) 39 Line Input #FileNumber, Buffer 40 Debug.Print Buffer 41 42 A = Split(Buffer, vbTab) 43 For j = 0 To UBound(A) 44 B(i, j) = A(j) 45 Next j 46 47 Loop 48 49 Close #FileNumber 50 51 FileName = Dir() 52 i = i + 1 53 Loop 54 Range("A1").Resize(100, 100) = B 55 MsgBox "処理が終了しました。", vbInformation 56 57End Sub 58
**追記 **
以下のように変更すると、自己解決できました
VBA
1 Open FilePath For Input As #FileNumber の部分を 2 Open FileFolder & "\" & FileName For Input As #FileNumber 3に変更すると上手く行きました。 4
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。