エクセルVBAでフォルダ内のファイル一覧を表示するDir関数の使い方


file-folder

photo credit: dahnielson Tickler file via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでファイルやフォルダを操作する方法についてお伝えしています。

前回の記事はコチラでした。

エクセルVBAでFileDialogオブジェクトを使ってファイル選択ダイアログを開く
エクセルVBAでファイルを開く作業を自動化する方法についてシリーズでお伝えしています。今回は、エクセルVBAでFileDialogオブジェクトを使ってファイル選択ダイアログを表示させる方法です。

FileDialogオブジェクトを使ってユーザーにファイル選択をさせる方法についてお伝えしましたね。

今回からちょっと趣向を変えまして、フォルダの中のファイルを全部開く、という別のツールを作っていきたいと思います。

その布石として、手始めにエクセルVBAでフォルダ内のファイル一覧を出力する方法についてお伝えします。

後日追記:FileSystemオブジェクトを使う方法も

以下記事にてDir関数ではなく、FileSystemオブジェクトを使う方法を紹介しています。FileSystemオブジェクトを使うほうが安全かつスマートにできますので、そちらもご参考ください。

【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法についてお伝えしています。今回は、FilesコレクションとそのFor Each文を使ってファイル一覧を出力する方法です。
スポンサーリンク

Dir関数の一般的に表記の方法

Dir関数ですが、その使い方は覚えていらっしゃいますか?

以前の記事では、ファイルが存在するかどうかをチェックするために

Dir(ファイルのフルパス)

として、その返り値によって

  • ファイルのフルパス:指定したファイルが存在する
  • 長さ0の文字列:指定したファイルが存在しない

というように判断をすることができるんだよ、という方法についてお伝えしました。

エクセルVBAでDir関数を使って指定のファイルが存在するかどうかを判定する方法
エクセルVBAでファイルを開く作業を自動化する方法についてのシリーズ。今回は開くファイルの指定をエクセルシートに変更し、またファイルが存在するかどうかをDir関数で判定する方法についてお伝えします。

そんなDir関数ですが、一般的にはこのような書き方になります。

Dir(パターン, 属性)

パターンには先ほどの例のようにファイルのフルパスを指定することもできますし、「*」や「?」などのワイルドカードも使用することができます。だから、パターンというわけですね。

属性については次回の記事で解説します。

Dir関数でワイルドカードを使った場合

Dir関数はパターンにマッチした中で最初のファイルを返すという特性があるので、それについてお伝えします。

ワイルドカードを使用して、複数のファイルがそのパターンと一致する場合、例えば「C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル」というフォルダの中に

  • エクセル-1.xlsx
  • エクセル-2.xlsx
  • テキストファイル.txt
  • ページ.html
  • ワード.docx

という5つのファイルが格納されているとします。

その場合に以下プログラムを実行すると

Sub Dir関数の使い方()

Dim strPattern As String
strPattern = "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\*"
Debug.Print Dir(strPattern)

End Sub

Dir関数はパターンにマッチした中で最初のファイル、つまりフォルダ内の最初のファイル「エクセル-1.xlsx」を返します。

エクセルVBAのDIr関数でフォルダ内の最初のファイルを出力

フォルダの指定時はワイルドカードの省略可能

ちなみに、フォルダ自体をパターンに指定して、フォルダ内のファイルを取得したい場合は最後のワイルドカード「*」は省略できます。

ですから、以下のように書くことができます。

Sub Dir関数の使い方()

Dim strPattern As String
strPattern = "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\"
Debug.Print Dir(strPattern)

End Sub

Dir関数でパターンを省略すると次のファイル

じゃあ、二つ目以降のファイルはどうすれば出せるんだ?ということなんですが、その場合は、パターンを省略して単に

Dir()

とすることで、Dir関数は前回指定したパターンマッチに対して次のファイルを返します。

前述のプログラムであれば一行追加して

Sub Dir関数の使い方()

Dim strPattern As String
strPattern = "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\"
Debug.Print Dir(strPattern)
Debug.Print Dir()

End Sub

として実行すると

エクセルVBAでフォルダ内の二つ目のファイルまで出力

このように「エクセル-1.xlsx 」「エクセル-2.xlsx 」と2番目のファイルまで出力することができます。

Dir関数でフォルダ内のファイル一覧を出力

フォルダ内のファイルを全て出力したいんだけど…というときは、Do While~Loopを使います。

繰り返しを抜ける条件として、「Dir関数の返り値の文字の長さが0より大きいかどうか」を判定すれば良いわけですね。

Sub ファイル一覧を出力()

Dim strPattern As String, strFile As String
strPattern = "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\"

strFile = Dir(strPattern) ’初回の検索
Do While Len(strFile) > 0 '文字列長が0より大きい間のみ繰り返す
    Debug.Print strFile
    strFile = Dir()
Loop

End Sub

このプログラムを実行しますと

エクセルVBAのDir関数でフォルダ内のファイル一覧を出力

このように全てのファイルが出力されます。

まとめ

エクセルVBAでフォルダ内のファイル一覧を取得する方法についてお伝えしました。

Dir関数…便利じゃないですか!?

これ一つで色々な動作をさせることが可能です。

ということで、次回も引き続きDir関数についてですが、フォルダ一覧を出力する方法です。

エクセルVBAでDir関数を使ってフォルダ一覧を表示する方法
エクセルVBAでファイルやフォルダを取り合う使う方法についてお伝えしています。Dir関数を使えばフォルダ一覧の出力もお手のもの。今回は、エクセルVBAでDir関数を使ってフォルダ一覧を表示する方法です。

どうぞお楽しみに!

連載目次:エクセルVBAでファイルやフォルダを操作する方法

お仕事でいつも決まったファイルをいつも一つずつダブルクリックして開くの…毎日だと思うと面倒ですよね。 このシリーズでは、ファイルを自動で開く、フォルダ一覧を出力するなど、エクセルVBAでファイルやフォルダを操作する方法についてお伝えしていきます。
  1. エクセルVBAでブックを開いたときに他のワークブックも一緒に自動で開く
  2. エクセルVBAでエクセル以外の他のアプリケーションを開く方法
  3. エクセルVBAでDir関数を使って指定のファイルが存在するかどうかを判定する方法
  4. エクセルVBAでFileDialogオブジェクトを使ってファイル選択ダイアログを開く
  5. エクセルVBAでフォルダ内のファイル一覧を表示するDir関数の使い方
  6. エクセルVBAでDir関数を使ってフォルダ一覧を表示する方法

タイトルとURLをコピーしました