Excel VBAで、指定したフォルダ内のファイル数を取得する方法を紹介します。
特定の拡張子(.xlsxや.csvなど)のファイル数の取得方法も紹介しています。
はじめに
ファイル数を取得する方法は、下記の2種類の方法があります。
- Dir関数を利用する方法
- FileSystemObjectを利用する方法
指定した拡張子のファイル数を取得したい場合、Dir関数を利用しましょう。
Dir関数を使用してファイル数を取得する方法
1つ目が、Dir関数を使用してファイル数を取得する方法です。
Dir関数とは
引数に指定したファイルがディレクトリ(フォルダ)内に存在する場合はファイル名を返し、存在しないときは空欄を返す関数です。
Dir関数は以下のように使います。
Dir [ (pathname, [ attributes ] ) ]
引数 | 説明 |
---|---|
pathname | 省略可能。ファイル名やフォルダーを指定します。見つからない場合、空欄(””)を返します。 |
attributes | 省略可能。ファイル属性を指定します。 |
引数「attributes」を省略した場合、その直前に指定したファイル名、かつ、まだ検索されていないファイル名を返します。
この特性を利用して順番にファイル名を取得し、ファイル数をカウントしていきたいと思います。
サンプルコード
Dir関数を使用してファイル数を取得する場合、ループを使用します。
また、ワイルドカードも使えるので、サンプルコードの中ではExcelファイル(.xlsx)がいくつあるか検索できるようにしています。
Sub SamplePyonlog()
'変数
Dim sFilePath As String 'フォルダパス
Dim sFileName As String 'ファイル名
Dim lFileCnt As Long 'ファイル数カウント用(数によってはIntegerでも◎)
Dim sFindPath As String '検索用パス
'フォルダを指定する
sFilePath = "C:\フォルダ名" '実際のファイルパスに書き換えてください
'検索したいファイル名を指定する
sFileName = "*.xlsx"
'初期化(ファイル数カウント用変数を初期化します)
lFileCnt = 0
'最初に検索するファイル名を指定
sFindPath = Dir(sFilePath & "\" & sFileName)
'ファイル名が取得できなくなるまでループ
Do While sFindPath <> ""
lFileCnt = lFileCnt + 1
sFindPath = Dir() '次のファイル名を取得
Loop
'取得したファイル数を表示
Print lFileCnt
End Sub
フォルダに存在する全てのファイル数を取得したい場合、
'検索したいファイル名を指定する
sFileName = "*.xlsx"
の部分を
'検索したいファイル名を指定する
sFileName = "*"
に変更してください。
FileSystemObjectでファイル数を取得する
FileSystemObjectでファイル数を取得する方法については、また他の記事で紹介したいと思います。
まとめ
今回はフォルダの中のファイル件数を取得する方法をご紹介しました。
このコードは、例えば他のExcelからデータをコピーしたい場合などに、コピー元となるファイルが存在するかどうか?のチェックにも利用できますね。
VBAは業務効率化にも非常に役立つので、勉強しておいて損はありません。
本で勉強するなら、以下の書籍がおすすめです。
プログラミングスクール無料体験
また、プログラミングスクールの無料体験を活用するのも手です。
コメント