Excel2007のVBAを使い、下記のようなマクロを作成しました。
(質問に必要そうな所だけ掲載しています。)
Dim dir_name As String ' ディレクトリ名
Dim file_name As String ' ファイル名
Dim EffectiveRow As Integer ' 開始行数/Excel/Row(行)
Dim ShellApp As Object ' SHDOCVW.DLL / MIC
Dim oFolder As Object ' フォルダパス
EffectiveRow = Range("A65536").End(xlUp).Row
Set ShellApp = CreateObject("Shell.Application")
Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1)
dir_name = oFolder.items.Item.Path
ChDir dir_name
file_name = Dir("*.txt", vbNormal)
Do Until file_name = ""
EffectiveRow = EffectiveRow + 1
Call ImportText(file_name, EffectiveRow)
file_name = Dir()
Loop
ShellApp.BrowseForFolderを使い、指定したフォルダを選択すると、
その中に有る、テキストファイル(.txt)を、全てExcelに書き込む
というマクロを作成したのですが、もっと汎用性を高くするために、
下記の内容を実現したく思っています。
- ↓ 実現したい事↓ -
- 状況 -
*フォルダの中に、サブフォルダが複数有り、そのサブフォルダの中に、
テキストファイル(.txt)が複数入っている。
- 処理 -
サブフォルダを格納している*フォルダを、ShellApp.BrowseForFolderで
選択し、一度でサブフォルダ内のテキストファイルを全てExcelに書き込
めるようにしたい。
上記のマクロから発展させて、このような処理を行う事は出来るでしょうか?
また、どのようにすれば実現させることが出来るでしょうか?
ご教授のほど、よろしくお願いします。m(_ _)m
※ [*フォルダ ] は同一フォルダです。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
途中から。
。。'----------------------------------------------
●ChDir dir_name '●これ不要だと思うが。。
dir_name = oFolder.items.Item.Path
Dim fso
Dim fsoFolder
Dim fsoSubFolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFolder = fso.GetFolder(dir_name)
For Each fsoSubFolder In fsoFolder.SubFolders
file_name = Dir(fsoSubFolder & "\*.txt", vbNormal)
Do Until file_name = ""
EffectiveRow = EffectiveRow + 1
Call ImportText(file_name, EffectiveRow)
file_name = Dir()
Loop
Next fsoSubFolder
'------------------------------------------
それから、Dir関数を使用せずに
For Each fsoSubFolder In fsoFolder.SubFolders
For Each fsoFile In fsoSubFolder.Files
If Right(fsoFile, 4) = ".txt" Then
とする方法もありますが後がこの場合のfsoFileはフルパスになります。
■注■
サブフォルダーの中に更にサブフォルダーがある場合は上記ではできません。
その場合は再起処理をすることにになります。
以上です。
No.3
- 回答日時:
のNo.2に下位フォルダーも含むファイルリストを取得するコードを回答しています。全フォルダーを調べ終わってから、得られたファイルリストに対して書き出し処理するというのではいかがでしょうか。ファイルリストに加えるときにテキストファイルだけ選別するか、あるいは得られたファイルリストの中でテキストファイルだけを処理対象にする様な処置は必要ですが。
No.2
- 回答日時:
Dim FSO, FLD
Set FS= CreateObject("Scripting.FileSystemObject")
Set FLD = FSO.GetFolder(oFolder.items.Item.Path)
処理 FLD
Sub 処理(FLD) '★再帰呼び出しによる処理
Dim SF
For Each SF In FLD.SubFolders '★フォルダ内のサブフォルダ
処理 SF '★各サブフォルダに対し同じことを繰り返す
Next
'★-- ここからフォルダ内のファイルの処理
ChDir FLD.Path
Dim file_name
file_name = Dir("*.txt")
=== ここからは以前の処理なので省略 ===
End Sub
No.1
- 回答日時:
こんにちは
ひとつのフォルダ内の処理はできているのですよね?
その中で、サブフォルダが見つかったら、そのサブフォルダを引数にして
自分自身を呼び出せるように、全体を少し修正すればできると思います。
(キーワード:再帰処理)
<参考>
http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
この回答への補足
ご回答有りがとうございます。
何となくは解るのですが、中々上手く
いきません・・・。
1つめのサブフォルダを見終わったら、
次のサブフォルダに移動する?方法が
解らないというのが1つあります(汗
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Fortranでのファイル名操作につ...
-
重複を防ぐ記述について教えて...
-
Flaskでサーバー立ち上げに関して
-
phpでショッピングカート機能を...
-
PHPで入力フォームでデータを確...
-
chmod 教えてください
-
PHPとHTML+Xamppの掲示板で画像...
-
プルダウンとCSVの連動
-
PHPでURLにジャンプするには?
-
アマゾンのような評価の星を選...
-
POSTを使わずに値を渡す方法
-
CodeIgniter/set_value()
-
<input type="hidden" >で配列...
-
フォームボタンを押すたびに数...
-
PHP ボタンが押されたら処理を...
-
入力した部分を表示させたまま...
-
POSTデータのNAME属性をVALUEに...
-
ブックマークレットで他ドメイ...
-
チェックボックスによる検索
-
PHP で画面の一部だけを変えたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
PHPで入力フォームでデータを確...
-
PHPからHTMLへの変数の受け...
-
POSTの項目に追加
-
PHP MySql 画像を取得
-
MySQL,PHPのリロードによる二重...
-
UPDATEできない
-
ファイル名を変更してアップロ...
-
php、sqlite3にデーター追加で...
-
openCVのトラックバーについて
-
複数条件での検索について教え...
-
PHP5でsimple_xml_load_fileす...
-
PHPのリロード時の処理
-
連想配列を複数条件で比較して...
-
PDOのprepareでLIKEの部分一致...
-
POSTされない
-
アップロードしたファイルの絶...
おすすめ情報