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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
サブフォルダ含むフォルダ内の全ファイルから指定文字列を含んだファイルの情報を一覧出力させたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングC++のmapについて
-
サブフォルダ内の全てのテキス...
-
VBA で、スペースを含むファイ...
-
PHPからデータベースの該当行を...
-
CakePHP テーブル名カラム名の...
-
イタリア人がCatherineと聞いた...
-
Flaskでサーバー立ち上げに関して
-
フォームからMYSQLへの接続
-
HTMLで前の画面に戻る時、入力...
-
テキストリンクをPOST送信したい
-
PHPでクリックするたびに変数を...
-
チェックボックスを用い、MySQL...
-
laravelを利用してコントロール...
-
フォーム送信後の更新ボタンで...
-
phpで、フォームのラジオボタン...
-
<input type="hidden" >で配列...
-
PHPでフォームデータをサンクス...
-
ラジオボタンをsessionで使いたい
-
検索後にチェックボックスのON/...
-
$_POSTを連想配列で取得したい!!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
VBA で、スペースを含むファイ...
-
POSTの項目に追加
-
phpで変数を使ってcopyできない
-
PHPからHTMLへの変数の受け...
-
foreachがうまく動かない
-
ファイル名を変更してアップロ...
-
MySQL,PHPのリロードによる二重...
-
$_SESSIONに渡した後はそのまま...
-
引数の参照について
-
ログイン パスワード変更のプ...
-
Smartyのforeachのnameに変数を...
-
PHP等を用いて在庫数を表示・管...
-
formでのチェックボックスのnam...
-
アップロードファイル名の文字化け
-
検索結果の出力先を違うフレー...
-
プログラムの流れの確認で・・
-
テキストボックスの値を取得したい
-
プルダウンでデータ送信後、値...
-
if文のなかで
おすすめ情報