質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3071閲覧

フォルダ内のテキストファイル₍拡張子はtxt₎をすべて、1つのエクセルシートにまとめたい

SnowMonkey

総合スコア53

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2019/10/23 11:03

編集2019/10/23 11:51

前提・実現したいこと

VBA初心者です。

VBAで、フォルダ内にあるテキストファイルをすべて読みこんで、
1つのエクセルシートにまとめようとしています。

下記に読みこもうとしているテキストファイルのイメージを示します(テスト用)

  • タブで区切られています
  • 被験者の人数分あります(実際は30個ほど。テスト用としては3個作成)。
  • 中身は、各ファイル1行でデータ数(列数)は固定です

(実際は41列ですが、テスト用のファイルは4列で作成)。
読みこみたいテキストファイルのイメージ

発生している問題・エラーメッセージ

フォルダ内の全てのファイルを読みこみたいのに
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/ツールのバージョンなど)

TanakaHiroaki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

vba

1 Open FilePath For Input As #FileNumber  の部分を 2 Open FileFolder & "\" & FileName For Input As #FileNumber  3に変更すると上手く行きました。 4

お騒がせいたしました。

プログラム初心者です。
書き方の作法を間違っている点も多いと思います。
もっと良い方法や改善点があれば教えてください。

投稿2019/10/23 11:57

SnowMonkey

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問