goo blog サービス終了のお知らせ 

パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

任意のフォルダ内のすべてのファイルを取得する(VBA/Excel2000以降)

2009-06-16 10:55:00 | ExcelVBA
今日は、任意のフォルダ内にあるすべてのファイルを取得する方法を取り上げます。

もちろん、サブフォルダ内のファイルもすべて取得します。

今回は、エクセルを使ってやってみましょう。
VBでも、同様の論理でできますので、興味のある方はチャレンジしてみてください。

エクセルの利点は、取得したファイル名をセルに書き出すことができる点でしょう。

ありがたいですね。


それでは、エクセルを起動してください。

ALTキー + F11キー で、Visual Basic Editorを起動してください。


次に、「挿入」メニューから、「標準モジュール」をクリックしてください。

これで、コードを書く準備が出来ました。


今回は、ファイルやフォルダを扱うので、専用の部品を使ってみます。
「ファイルシステムオブジェクト」といいます。

ただし、これは、いきなり使用すると手ごわいので、まずは、参照設定をして、
使いやすいようにします。


「ツール」メニューの「参照設定」をクリックします。





表示されたダイアログボックスの「参照可能なライブラリ ファイル」の一覧から、
「Microsoft Scripting Runtime」を見つけ出して、チェックを入れてください。

OKをクリックして、ダイアログボックスを閉じます。






さあ、それでは、コードを記述しましょう。

以下のように入力してください。


Option Explicit
Private fso As FileSystemObject
Private c As Integer

Sub getFiles(path As String)
    Dim fs As folders
    Dim f As folder
    Dim mFile As File
    
    For Each mFile In fso.GetFolder(path).Files
        Cells(c, 1).Value = mFile.Name
        c = c + 1
    Next
    Set fs = fso.GetFolder(path).SubFolders
    If fs.Count = 0 Then Exit Sub
    For Each f In fs
        getFiles (f.path)
    Next
End Sub

Sub test()
    Dim FolderPath As String
    
    Set fso = New FileSystemObject
    FolderPath = "C:sample"
    c = 1
    getFiles (FolderPath)
    Set fso = Nothing
End Sub




参考までに、画像を載せておきます。





getFiles が、実際の処理をするプロシージャです。
再帰呼び出しを駆使して、サブフォルダ内のファイルを取得できるようになっています。

test が、任意のフォルダを指定して、先ほどのgetFilesを呼び出すプロシージャですね。

このプロシージャの中の、

FolderPath = "C:\sample"

のダブルコートの部分を、任意のフォルダ名に変更してください。

たとえば、マイドキュメントなら、

C:\Documents and Settings\[ここにユーザー名を入れてください]\My Documents

となりますね。



それでは、エクセルに切り替えて、マクロを実行しましょう。

ALTキー + F8キー を押してください。




エクセルのシートにファイル名の一覧が書き出されます。





たくさんのファイルが保存されているフォルダを指定すると、
結構時間がかかったりしますので、ご注意くださいね。



だい

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 表の印刷サイズを指定したい... | トップ | Windows7 RC レビュー Part-1 »
最新の画像もっと見る

コメントを投稿

ExcelVBA」カテゴリの最新記事