こんにちは。
指定フォルダに格納されたExcelブックを読み込んで…なんてツール開発をよく頼まれます💦ということで、今回、VBAで指定フォルダ内のファイルを一覧を作成する仕組みを備忘録します。アプローチ方法としては、FileSystemObjectクラスを活用したスマートなやり方が多数ネットに転がってましたが、私はDir関数で地道に、です^^。
■ 動作環境
OS: Windows 8.1
Excel: 2013
■ Dir関数
指定したパターンまたはファイル属性に一致するファイル、ディレクトリ(フォルダ)、またはドライブのボリューム ラベルを表す文字列を返します。
> Dir [ (pathname, [ attributes ] ) ]
引数 pathname は、省略可能。ファイル名を指定する文字列式です。ディレクトリまたはフォルダー、およびドライブを含めることができます。pathname が見つからない場合は、長さ 0 の文字列 ("") が返されます。
引数 attributes は、省略可能。ファイル属性を指定する定数、または数式です。省略した場合は、pathname に一致する、属性のないファイルが返されます。
引数 attributes の設定値は次のとおり。
vbNormal: 0、(既定値)属性のないファイル
vbReadOnly: 1、属性のないファイルと読み取り専用のファイル
vbHidden: 2、属性のないファイルと隠しファイル
vbSystem: 4、属性のないファイルとシステム ファイル
vbVolume: 8、ボリューム ラベル。他の属性を指定した場合は、vbVolume は無視されます。
vbDirectory: 16、属性のないファイルとディレクトリまたはフォルダー
■ フォルダ内のファイル一覧を取得
Dir関数を使って、指定フォルダ内のサブフォルダ、ファイル一覧を取得します。またサブフォルダの場合は、再帰的に自身をコールして、その配下までサブフォルダ、ファイル一覧を取得します。
任意のボタンに設定したイベントプロシージャ「ボタン1_Click」にて、特定のフォルダ「C:\TEMP\Excelノウハウの備忘録♪」を指定してdirEx関数を呼び出します。
dirEx関数では、引数argを起点に直下のサブフォルダ、ファイル一覧を取得し、デバック表示していきます。
取得した値が、自身を示す「.」、親フォルダを示す「..」の場合は、スルーします。
また、ディレクトリの場合は、(のちほど掘り下げるため)動的配列に突っ込んでおきます。
argで指定されたカレントフォルダの調査が済んだら、動的配列に突っ込んだサブフォルダ情報を起点に、再帰的に自身をコールして掘り下げ調査します!
■ まとめ
いかがでしたでしょうか?
Excelから外部のフォルダ、ファイルを操作する…的なニーズってすごく多いと思いますので、自由に操れるようにしておくと便利ですね。
機会があれば、FileSystemObjectクラスを使ったスマートなアプローチ方法も紹介したいと思います。
次回以降も、苦労した点を備忘録しようと思います。
Comments