前回質問した者です。
http://oshiete.goo.ne.jp/qa/7062908.html
ある特定のフォルダ内に複数のフォルダがあり、その中の各フォルダには、txtファイルが複数あります。
VBAを使ってエクセルのA列にフォルダ名、B列にtxtファイル名、C列にはtxtファイルの内容を入れたいです。(今はコピペを手動で行っています)
フォルダA
↓
フォルダ1、フォルダ2、フォルダ3、・・・・
↓
各フォルダにはtxtファイル(改行あり)
VBAは解らないのですが、自分なりに検索してみて、以下のコードを見つけました。
しかし、以下の場合はA列にtxtファイルの内容しか入らず、また、特定のフォルダのみしか反映されません。
そこで、フォルダAのパスだけを指定して、A列にフォルダ名、B列にtxtファイル名、C列にはtxtファイルの内容を入れるにはどうすればいいのでしょうか?
Sub Macro()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim FolderPath As String
'ここのアドレスをファイルが格納されているフォルダのパスに変えてください
FolderPath = "H:\Documents and Settings\asano\デスクトップ\TEST"
Dim myFile As Object
Dim i As Long
i = 1
For Each myFile In fso.GetFolder(FolderPath).Files
Cells(i, 1).Value = fso.OpenTextFile(myFile.Path).ReadAll()
i = i + 1
Next
End Sub
No.3ベストアンサー
- 回答日時:
フォルダAの下のサブフォルダが1階層だけ(子フォルダまで)なら、「再帰」で全てのサブフォルダを舐める事無く、For Each を二重にするだけで済みます。
i = 1 の下を次の様に書き換えて見てください。
Dim myFolder As Object
For Each myFolder In fso.GetFolder(FolderPath).SubFolders
For Each myFile In fso.GetFolder(myFolder).Files
Cells(i, 1).Value = myFolder
Cells(i, 2).Value = myFile.Name
Cells(i, 3).Value = fso.OpenTextFile(myFile.Path).ReadAll()
i = i + 1
Next
Next
テキストファイル以外が入っていた時などの処理は元のコードでも考慮されていないので省略しています。また、前回の質問は見ていませんので何か別な条件があっても考慮していません。あしからず。
No.1
- 回答日時:
プログラミングのロジックの学習で最初にならうのが、
”再帰”
と言う手法です。これを学べばいいだけです。
>ある特定のフォルダ内に複数のフォルダがあり、その中の各フォルダには、txtファイルが複数
最初のフォルダーを指定すれば、「再帰的にループ」を繰り返すことで、全てのドライブの全てのフォルダーに在るファイルがリストされます。そのファイルに対してのパス名を取得して、処理に渡せば言いだけです。
http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF …
(再帰検索リスト)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …
(上記から適当と思われる再帰ロジック説明)
さらに、有効なドライブの取得方法
http://search.yahoo.co.jp/search?p=VBA+sample+%E …
(検索リスト)
このドライブレターを再帰ループの先頭で指定すれば、対象となるドライブのリストが得られる。もちろん最初から特定ドライブがあれば、それを指定するだけ。
これは、基本的には”Scripting.FileSystemObject”のクラス(COM)を使用するか、シェル(エクスプローラ)”Shell.Application”のクラス(COM)
http://msdn.microsoft.com/ja-jp/library/cc409798 …
http://search.yahoo.co.jp/search?p=Shell.Applica …
を使用すると今後の展開力に強くなる。
どれを使っても達成できるので、まあ自由にやってください。
最後にファイルのオープンの仕方と、エクセルオブジェクトのデータバインド(セルへのデータ流し込み)の仕方をそれぞれの検索するだけ。
それを
for
while
http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF …
などのループの中に入れるだけ。
それと、VBAの書式では、クラス定義又はサブルーチンの作成の仕方を取得する必要がある。
http://search.yahoo.co.jp/search?p=VBA+%E6%9B%B8 …
さて、これらを自分でチョイスしてできなようでは、自分でスクリプトを作るのをあきらめてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
パス名に2バイト文字(マルチバ...
-
vbsで選択ダイアログを表示した...
-
Excelで指定したフォルダに保存...
-
C ファイル出力で、フォルダが...
-
META-INFフォルダの置き場所に...
-
デスクトップの画像をhtmlに表...
-
エクセル VBA ファイルをフォ...
-
ファイル名と同名のフォルダを...
-
VBA:特定の文字を含むフォルダ...
-
サーバ内のフォルダ名と各フォ...
-
VBA フォルダ名に特定の文字を...
-
エクセルのデータをメモ帳に貼...
-
フォルダ配下のファイル作成日...
-
Excel VBA 同じ名前のフォルダ...
-
保存先のフォルダ名を指定した...
-
GetAttrが原因?
-
VBA 最新のフォルダ取得
-
自動的に作られるresource.hに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
パス名に2バイト文字(マルチバ...
-
ファイル名と同名のフォルダを...
-
VBA 最新のフォルダ取得
-
Excelのハイパーリンクについて...
-
デスクトップの画像をhtmlに表...
-
ディレクトリ名変更してコピー...
-
VBA フォルダ名に特定の文字を...
-
バッチファイルで指定フォルダ...
-
フォルダ内のPDFファイル名を変...
-
Access VBA で フォルダ権限...
-
excelマクロ 冒頭3文字が一致す...
-
【マクロ】ファイル名の日付に...
-
フォルダにリンクを貼りたい
-
会社のネットワーク上のファイ...
-
多量のファイルをフォルダに自...
-
C ファイル出力で、フォルダが...
-
保存先のフォルダ名を指定した...
-
vbsで選択ダイアログを表示した...
-
Excel VBA 同じ名前のフォルダ...
おすすめ情報