- ベストアンサー
エクセルのVBAで特定のフォルダ内にあるファイル名称の一覧を取得できるような方法は?
始めまして、ボスからの依頼ですが、わからなくて困っています。 ひとつのフォルダに複数のエクセルファイルを保存し、それぞれのファイル(ブック)に対して加工を施すマクロを実行したいと考えています。その際、特定のフォルダ内にあるファイル名称の一覧を取得するようなマクロがあれば、1回の実行ですべてのファイルを加工できるので、時間の短縮を図れると考えました。 そこで、そのようなことができるマクロ(マクロ単体ではなく、いくつかのマクロを組み合わせて取得する方法でも構いません)をご存知の方がいらっしゃいましたら教えていただけませんでしょうか。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
できました? 久しぶりに、VBSで遊んでます<私(^^) ファイル一覧取得用 Dim objFileSystem Dim objFolder Dim FolderName Dim EachFile Dim strList '知りたいフォルダをフルパスで入力。例として、C直下 FolderName = "C:\" Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFolder = objFileSystem.GetFolder(FolderName) 'Text1を空に Text1 = "" 'フォルダ内のすべてのファイル名称をゲットして 'strList変数にまとめていく。 For Each EachFile In objFolder.Files Text1 = EachFile.Name strList = strList&"\" & Text1 Next 'strList変数にまとめたファイル名を、 'Split関数で分割。 strA = split(strList,"\") 'メッセージボックスでひとつずつ表示。 'ここで、ひとつずつファイル名が分割されるので、 '処理を行うなら、ここに記述すればよいでしょう。 For Each StrA In StrA Msgbox strA Next End では。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
似たような質問に答えたことがあります。 http://www.okweb.ne.jp/kotaeru_reply.php3?q=351271
- nishi6
- ベストアンサー率67% (869/1280)
Sheet1のコードウインドウに貼り付けます。 指定フォルダのエクセルブック(*.xls)のファイル名をSheet1のA列に、パス+ファイル名をB列に表示します。 『myFolder』に、ドライブ名とフォルダを指定して実行します。Dirを使っています。 Sub getFileNames() Dim myFolder As String 'ドライブ、フォルダ Dim filename As String 'ファイル名 Dim rw As Long '行カウンタ myFolder = "C:\My Documents\・・・\・・・" '***ドライブ名とフォルダを指定します filename = Dir(myFolder & "\" & "*.xls") While filename <> "" rw = rw + 1 Cells(rw, 1) = filename Cells(rw, 2) = myFolder & "\" & filename filename = Dir Wend End Sub
- norakuma
- ベストアンサー率29% (293/977)
#3書いてから気づきました。 For Each EachFile In objFolder.Files Text1 = EachFile.Name ここで処理を記述すればいいだけでしたね。 あはは。。。 Next
- norakuma
- ベストアンサー率29% (293/977)
補足です。 下記の、FolderNameには、その前で、フルパスで フォルダまでのパスを代入しておいてください。 FolderName = "C:\なんとかかんとか" Set objFolder = objFileSystem.GetFolder(FolderName)
- norakuma
- ベストアンサー率29% (293/977)
昔、VBSでこんなのを作りました。 フォルダの中に、ファイルがあるかどうか確認するタスク用に作成したものですが、原理は同じです。 Text1にファイル名を入れるようにしてますので、 表示するなり、テキストに吐き出すなり、作成してみてください。 では。 Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFolder = objFileSystem.GetFolder(FolderName) Text1 = "" FlgCount = 0 For Each EachFile In objFolder.Files Text1 = EachFile.Name If Text1 <> "" then '適当な処理 End If Next
お礼
素早い返信、どうもありがとうございました。 さっそくこれから試してみます。