Digital_Neko

フリーランスプログラマー

Excel VBA フォルダ内のファイル名を取得する

今回はフォルダ内のファイル名を全て取得するマクロです。まずSampleというフォルダを準備します。

そしてその中に、「sample1.txt」、「sample2.txt」、「sample3.txt」を
入れます。フォルダ内の様子は図1のようになっています。

図1 Sampleフォルダ

次にExcelのプログラムの記述をしていきます。最初に事前設定をします。
まずツールから、参照設定で「Microsoft Scripting Runtime」にチェックを
入れてOKボタンをクリックします。設定方法は、図2、3のようになります。
これでFileSystemObjectやFolderオブジェクトを使えるようになります。

図2 参照設定

図2でツールから参照設定をクリックします。次に、

図3 参照設定 チェック

「Microsoft Scripting Runtime」にチェックを入れて、「OK」ボタンを
クリックします。これで事前設定が終了したので、sampleプロシージャに処理を
記述していきます。実際のコードは図4になります。

図4 フォルダ内のファイル名を取得

まず、FileDialog型のオブジェクトを宣言します。
次にApplication.FileDialogプロパティを利用し、パラメータに
msoFileDialogFolderPickerと入力することで、ユーザーがフォルダーを選択
するのを許可します。戻り値はファイルダイアログオブジェクトを返します。

fd.AllowMultiSelect = False とすることで、フォルダーを複数選択できなく
します。

フォルダーを選択後、fd.SelectedItems(1)とすることで、選択したフォルダ
のパスを取得することができます。かっこの中が1なのは、フォルダを1つしか
選択していないため、インデックス番号1番に値が格納されているためです。

したがって文字列型変数、folderpathに選択したフォルダのパスを格納します。

次に、Dim fs as FileSystemObject、Set fs = new FileSystemObjectとして
FileSystemObjectのインスタンスを生成します。

さらに、Folder型の変数 fl を用意し、fs.GetFolder(folderpath)とし、
引数にフォルダのパスをセットして、flに選択したフォルダーのオブジェクト
をセットしています。

Debug.Print fl.name としてイミディエイトウインドウにフォルダの名前
を表示するようにしています。

ここで、セットしたフォルダオブジェクトから、ファイルの名称を取得したいので
fl.Filesとして、指定したフォルダ内の全てのファイルのコレクションを取得します。

コレクションの中身を表示するのに、拡張For文を利用します。コレクションの中身
はファイル型の値になっているので、これを受け取るFile型の一次変数valを用意
します。

そして、For Each val In fl.Files でコレクションから、ファイル型の値を取り出し
一次変数Valに代入し、Debug.Print val.Name とすることで、ファイル名を
イミディエイトウィンドウに表示しています。

フォルダを選択した後の実行結果は、図5になります。

図5ファイル名取得 実行結果

拡張For文からファイル型のオブジェクトが取り出され、ファイル名が表示されて
いるのが確認できます。1行目のSampleはフォルダ名です。

今回は、フォルダ内のファイル名を全て取得するマクロを紹介しました。

この記事が、誰かの助けになれば幸いです。それでは。