【VBA】指定フォルダ内のフォルダ数を取得する

エクセルVBAで使うコードの備忘録。VBAで指定フォルダ内に存在するフォルダ数を取得するコードをご紹介します。ファイルシステムオブジェクトを使えば簡単にフォルダ数を取得することが可能です。フォルダではなくファイル数を取得する場合はこちらをご覧ください。

スポンサーリンク

ファイルシステムオブジェクト

ウィンドウズのフォルダやファイルに関する情報を扱う場合にはFileSystemObject(ファイルシステムオブジェクト)を利用するのが便利です。

ファイルシステムオブジェクトの生成は下記のように行います。

'--- ファイルシステムオブジェクトの生成 ---'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

このようにして生成された、ファイルシステムオブジェクト(上記の例では変数fso)に対して、GetFolderメソッドを使用すると、引数として与えたパスのフォルダを表すオブジェクトが取得できます。

さらにこのフォルダオブジェクトに対して「SubFolders」というプロパティがそのフォルダに含まれる下部フォルダの集合を表すオブジェクトになります。フォルダ数を取得するには、このSubFoldersで取得したフォルダ集合のオブジェクトに対してCountプロパティでその要素数を取得してやればOKです。

サンプルコード

下記のサンプルコードでは、SubFoldersによって取得したフォルダ一覧に対してCountプロパティを使ってフォルダ数を取得しています。

なお、サンプルコードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

Public Sub GetFolderCount()
    
    '--- 含まれるフォルダ名を知りたいフォルダのパス ---'
    Dim folderPath As String
    folderPath = "[フォルダのパス]"
    
    '--- ファイルシステムオブジェクト ---'
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '--- フォルダ数を格納する変数 ---'
    Dim n As Long
    n = fso.GetFolder(folderPath).SubFolders.Count
    
End Sub