VBA ファイル名の取得|フォルダ内のファイル名一覧を取得する方法

2018/02/28

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

Excel VBAを使ってプログラミングをしていると、フォルダの中の複数ファイルを自動でひとつずつ展開しながら 連続処理 をさせたいときがあります。

そんな時、最初のステップとして必要なのが;
フォルダの中に格納されているファイル名の一覧を取得する
というワザ。

これができないと、処理するファイルを都度ユーザーに指定させることになってしまい、「連続」処理ができません。
※フォルダ内のファイル名に規則性を待たせれば可能ですが、実用的ではありません。

というわけで、今回の h1r0-style.net は、フォルダの中に格納されている ファイル名の一覧を取得する方法 をピックアップします。

VBAでファイル名を取得する

ここで紹介するVBAのコードは;
1.任意のフォルダ内に格納されているファイル名の一覧を取得する
2.その結果を Excelのシート(セル)上に表示させる

ためのコードです。


フォルダの場所を指定する

前述のとおり、今回は ファイル名の一覧取得 にフォーカスするために、フォルダの場所(Path)とフォルダ名は固定とします。

今回のテスト用フォルダの場所は;

D:¥TEST¥Data

これで固定とします。
今回は「Data」という フォルダ内のファイル名 の一覧を取得します。

そしてサンプルコードでは、ファイルの場所(Path)を、strPath という名前に代入します。

strPath = "D:¥TEST¥Data"

▲文字列として処理するので Pathはダブルクォーテーションで挟みます

※フォルダをユーザーに自由に選ばせる方法は、また別の機会に紹介します。

フォルダがなかった時の対策

みなさんの置かれている状況にもよりますが、不特定多数がオペレーションに関係している場合、誰かの不注意でフォルダが削除されてしまうような事故の可能性もゼロではありません。

マクロが走った時にエラーにならないように、指定したフォルダが見つからなかった場合の対策を講じておきましょう。

’もし指定の Path にフォルダがなかったら
If Dir(strPath, vbDirectory) = "" Then
  MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
Exit Sub
End If

いきなり出てきた cnsTitle はメッセージボックスのタイトルなので、あまり気にせず最後のサンプルコードで確認してください。この場はスルーします。

ファイル名の取得

このパートが今回のキモです。
D:¥TEST¥Data の中に、サンプルとして複数のファイルを格納しておきます。

▲サンプルとして3つのファイルを置いた

これを、ユーザーがフォルダを開くことなく、VBAでフォルダ内のファイル名の一覧を取得する のが今回の狙いです。

Dir関数とは

Dir関数とは、指定したPathのファイル名やフォルダ名を返す関数で;

Dir [( pathname [, attributes] ) ]

のように表されます。

[,attributes] の部分は省略が可能ですが、今回は vbNormal を使用します。


フォルダ内の サブフォルダ も抽出したいときは、vbDirectory を使いましょう。


取得したファイル名一覧をセルに表示

Do While Loop で Dir関数を繰り返す

Dir関数 はファイル名をひとつずつ返します。
フォルダ内のファイル名一覧 を取得するためには、格納されているファイルの数だけ Dir関数を繰り返す必要があります。

そこで、Do While Loop  を使って、Dir関数を繰り返し実行します。

Const cnsDIR = "¥*.*"
Dim strPath As String
Dim strFilename As String
Dim GYO As Long' 先頭のファイル名の取得
strFilename = Dir(strPath & cnsDIR, vbNormal)
' ファイルが見つからなくなるまで繰り返す

Do While strFilename <> ""
  ' 行を加算
  GYO = GYO + 1 
  Cells (GYO, 1) .Value = strFilename
  ' 次のファイル名を取得
  strFilename = Dir( )
Loop

Cells (GYO, 1) .Value = strFilename の部分が、エクセルシートのセルA〇にファイル名を表示させる部分です。

サンプルコード(最終形)

では、これまで述べてきた内容を踏まえた完成形のサンプルコードを見てみましょう。

Option Explicit


'*********************************************************
'   指定フォルダ内のファイル名一覧を取得
'*********************************************************
Sub Get_FileName()
  Const cnsTitle = "ファイル名一覧取得"
  Const cnsDIR = "\*.*"
  Dim xlAPP As Application
  Dim strPath As String
  Dim strFilename As String
  Dim GYO As Long

  Set xlAPP = Application
  ' フォルダの場所を指定する
  strPath = "D:\TEST\Data"

  ' フォルダの存在確認 --- 必要な場合のみ記述 ---
  If Dir(strPath, vbDirectory) = "" Then
    MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
  Exit Sub
  End If

  ' 先頭のファイル名の取得
  strFilename = Dir (strPath & cnsDIR, vbNormal)
  ' ファイルが見つからなくなるまで繰り返す
  Do While strFilename <> ""
    ' 行を加算
    GYO = GYO + 1
    Cells (GYO, 1).Value = strFilename
    ' 次のファイル名を取得
    strFilename = Dir( )
  Loop
End Sub
'-----------------<< End of Source >>------------------

▲このまま標準モジュールにコピペして使えます

このコードを実行するとExcelシート上には;

▲このように、セルA1から下方向にファイル名がひとつずつアウトプットされます。

以上で EXCEL VBAでフォルダ内のファイル名一覧を取得する方法 についての解説は終了です。
その他のVBA関連トピと合わせて役立ててください。

関連記事



併せて読んでおくと便利

VBAで最終行を取得する方法と そこからできること|Excel VBA
VBA・最終行
VBAで最終行を取得する方法を解説。最終行の行番号を取得できることにより最終行の削除や、最終行までセルを選択したり繰り返したり色々なことが可能になります。

VBA カレントフォルダの取得と設定・変更|Excel VBA
VBA・CurDir関数
VBAで カレントフォルダ名 を取得したり、設定(指定)したり変更(移動)したりする方法について解説します。CurDir関数 や ChDirステートメント などの使い方についても触れています。

VBAでシート数を取得する方法と そこからできること|Excel VBA
VBA・Countプロパティ
VBAでシート数を取得する方法の解説。VBAを使って各シートに同じ作業をさせる場合は流動的に変化するシート数を取得しておく必要があります。Countプロパティを使って...

VBA [ファイルを開く] ダイアログボックスを表示させる|EXCEL VBA
VBA・ダイアログボックス
VBAで [ファイルを開く] ダイアログ ボックスを表示させ、選択したファイル名をテキストボックスに表示させるまでを解説。GetOpenFilenameメソッドを、使用例もサンプルコードを公開しています。

VBA「フォルダ選択」ダイアログを表示させる|Excel VBA
VBA・ダイアログボックス
VBAを使い、ファイルではなく「フォルダ選択」をさせる ダイアログボックス を表示させ、ユーザーが選択した フォルダ名 を含むPathを テキストボックスに表示させる方法について解説。

VBAで空白行を削除する方法|Excel VBA 高速技
VBA・Unionメソッド
VBAを使って空白行の削除方法を解説します。Unionメソッド を使用して空白行を高速で一括削除する方法をサンプルコード付きで解説。ぜひ参考にしてください。



※その他、関連記事はこの記事の下の方にもあります。

-EXCEL&VBA
-, , ,

シェアしていただけると助かります。