今回はVBAで「FileSystemObject(ファイルシステムオブジェクト)」を使用して、ファイル数を取得する方法についてご説明します。
また、拡張子を指定してファイル数を取得する方法についても併せてご説明したいと思います。
VBAでファイル数を取得する方法には「Dir関数」と「FileSystemObject(ファイルシステムオブジェクト)」を使用する方法があります。
「Dir関数」を使用してファイル数を取得する方法については、「指定したフォルダ内のファイル数を取得する方法」をご覧ください。
その他のファイルの操作については下記記事をご覧ください。
1.FileSystemObjectでファイル数を取得する
拡張子の指定など、条件を指定しなければ「Dir関数」を使うよりもシンプルに取得が可能です。
コードが非常にシンプルになりますが、拡張子の指定やファイル名の部分一致等で取得する場合は、一工夫必要になります。
FileSystemObjectとは
簡単にですが、「FileSystemObject」オブジェクトについてご説明します。
「FileSystemObject」オブジェクトは、ドライブ、フォルダ、ファイルなどを操作する事ができるオブジェクトです。
FileSystemObjectを使用するには「CreateObject」メソッドを使用して次のように記載します。
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
詳細については「FileSystemObjectでファイルをコピーする」をご覧下さい。
FileSystemObjectでファイル数を取得するコード
それでは「FileSystemObject」を使用したファイル数の取得のサンプルコードです。
次のような「Test01~04」というファイル名のExcelファイルと、「マクロ01~02」というマクロのファイルと「メモ帳01~02」というテキストファイルをCドライブに用意しました。
このフォルダ内のファイル数を取得したいと思います。
すべてのファイル数を取得する
「FileSystemObject」では「Files.Count」で指定したフォルダ内のファイルの数を取得出来ます。
ループなども必要ないため、非常にシンプルなコードになります。
Sub Sample1()
Dim FolderPath As String
Dim FileInt As Long
Dim FSO As Object
'ファイルシステムオブジェクトをセットする
Set FSO = CreateObject("Scripting.FileSystemObject")
FolderPath = "C:\Sample" 'フォルダを指定する
FileInt = FSO.GetFolder(FolderPath).Files.Count '指定したフォルダ内のファイル数を取得する
MsgBox FileInt
End Sub
非常にシンプルなコードになりました。
「Set FSO = CreateObject(“Scripting.FileSystemObject”)」でFileSystemObjectを使用できるようにセットします。
「FolderPath = “C:\Sample”」でフォルダパスを指定します。
「FileInt = FSO.GetFolder(FolderPath).Files.Count」で取得したフォルダのファイルを取得して、ファイル数をCountで取得します。
2.拡張子を指定してファイル数を取得する
全てのファイル数を取得出来ましたので、次はファイルの拡張子を指定してファイル数を取得する方法です。
「GetFolder(フォルダパス).Files」で取得したフォルダ内のファイルをすべてループします。
「GetExtensionName(ファイル)」で拡張子を判定します。
この時、拡張子の大文字、小文字を区別しないため、判定する際には「LCaseメソッド」を使用して取得した拡張子を小文字に変換します。
拡張子を指定してファイル数を取得するコード
Sub Sample2()
Dim FolderPath As String
Dim FileInt As Long
Dim FSO As Object
Dim Fl As Object
Dim ext As String
'ファイルシステムオブジェクトをセットする
Set FSO = CreateObject("Scripting.FileSystemObject")
FolderPath = "C:\Sample" 'フォルダを指定する
ext = "xlsx" '拡張子を指定する
FileInt = 0 'ファイル数をカウントする変数を0にする
'取得したフォルダ内のファイルをループ
For Each Fl In FSO.GetFolder(FolderPath).Files
'拡張子を判定する
If (LCase(FSO.GetExtensionName(Fl)) = LCase(ext)) Then
FileInt = FileInt + 1
End If
Next
MsgBox FileInt
End Sub
「Set FSO = CreateObject(“Scripting.FileSystemObject”)」でFileSystemObjectを使用できるようにセットします。
「FolderPath = “C:\Sample”」でフォルダパスを指定します。
「ext = “xlsx”」で拡張子を指定します。
「FileInt = 0」でファイル数をカウントする変数を0にします。
「For Each Fl In FSO.GetFolder(FolderPath).Files」で取得したファイル数をすべてループします。
「If (LCase(FSO.GetExtensionName(Fl)) = LCase(ext)) Then」で指定した拡張子か判定します。