【Excel VBA】フォルダ内のフォルダ名を取得する方法!サブフォルダ名も取得可!

Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得するやり方がわからない。
・ファイル名を除いてフォルダ名のみ取得したいがやり方がわからない。

ですよね。

今回はそんなお悩みを解決する
Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得する方法について
まとめます!


Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得する完成イメージ

Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得する完成イメージについて説明します。

前回の「【Excel VBA】サブフォルダを含むファイル名を取得する方法!拡張子無し版も!」はファイル名を含むフォルダ名の取得でしたが、今回はフォルダ名のみに絞り込み取得していきます。

まず、フォルダ名一覧を取得したいフォルダへアクセスし、パス情報を取得します。

2階層目以降も同じようにファイルとフォルダが入っています。

エクセルにシートを追加し、B1セルへそのパスを貼り付けます。

VBAを実行すると、黄色い背景の箇所にサブフォルダを含むフォルダ名とそのパスであるディレクトリ情報が出力されます。

ファイル名は除外されフォルダ名のみ出力されます。

それではさっそくやってみましょう。



サブフォルダを含むフォルダ内のフォルダ名を取得するVBA

フォルダ内のフォルダ名を取得するVBAを実装していきましょう。

以下サンプルコードです。

Sub サブフォルダ含むフォルダ名取得()

Dim intIchi As Integer
Dim strFolderpass As String

'ファイル名一覧を出力する行番号を指定します。
intIchi = 3

'対象フォルダのパスがあるセルを指定し、値を代入します。
strFolderpass = Range("B1").Value

'指定範囲の値をクリアします。
Range("A3:B10000").Clear

'ファイル名取得プロシージャを呼び出します。
Call フォルダ名取得プロシージャ(strFolderpass, intIchi)

End Sub



Sub フォルダ名取得プロシージャ(strFolderpass As String, intIchi As Integer)

Dim objfFSO As Object
Dim objFiles As Object
Dim objFile As Object
Dim objSubFolders As Object
Dim objSubFolder As Object


'対象フォルダのパスの値があれば処理をおこないます。
If strFolderpass = "" Then
    MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else

    'FileSystemObjectはファイルやフォルダを操作する専用のオブジェクトです。インスタンスにセットします。
    Set objfFSO = CreateObject("Scripting.FileSystemObject")

    '対象フォルダのファイルオブジェクトをセットします。
    Set objFiles = objfFSO.GetFolder(strFolderpass).Files
    
    'ファイル情報を出力します。
    For Each objFile In objFiles

        '拡張子の有無をチェックし、ない場合はフォルダと判断し出力します。
        If InStr(objFile.Name, ".") = 0 Then
             Cells(intIchi, 1) = objFile.Name
             Cells(intIchi, 2) = objFile.Path
             intIchi = intIchi + 1
        End If
        
    Next objFile
    

    '対象フォルダのサブフォルダファイルオブジェクトをセットします。
    Set objSubFolders = objfFSO.GetFolder(strFolderpass).SubFolders

    'サブフォルダを含むフォルダ名取得の処理をおこないます。
    For Each objSubFolder In objSubFolders
     
        If objSubFolder.Name <> "" Then

            '拡張子の有無をチェックし、ない場合はフォルダと判断し出力します。
            If InStr(objSubFolder.Name, ".") = 0 Then
                    Cells(intIchi, 1) = objSubFolder.Name
                    Cells(intIchi, 2) = objSubFolder.Path
                    intIchi = intIchi + 1
            End If
            
            
            'サブフォルダのパスを本プロシージャへ渡して再帰的に処理を繰り返します。
            Call フォルダ名取得プロシージャ(objSubFolder.Path, intIchi)
            
        End If
         
    Next objSubFolder

End If

Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing
Set objSubFolders = Nothing
Set objSubFolder = Nothing

End Sub

VBAの設定

以下の設定をおこないます。

フォルダ名一覧を出力する行番号を指定します。サンプルではA3から出力していますので3行目の3を入れています。

intIchi = 3

対象フォルダのパスがあるセルを指定します。上記の通りB1セルを指定します。

strFolderpass = Range(“B1”).Value

指定範囲の値をクリアします。これは再実行時に前の出力値を残さないようにするためにする設定です。
1万行以上ある場合は数値の部分を変更してください。

Range(“A3:B10000”).Clear

では実行してみましょう。

はい、指定フォルダの一階層目以降のファイル名とフォルダ名が取得できていますね。

VBAの説明

前回のファイル名とフォルダ名を取得する処理と変更した点は、
取得したフォルダ名一覧からドット「.」がある場合は拡張子のあるファイル名と判断し、

次にファイル名を除いたフォルダ名のみ出力するようにしているところです。

こちらの箇所です。

If InStr(objFile.Name, “.”) = 0 Then
Cells(intIchi, 1) = objFile.Name
Cells(intIchi, 2) = objFile.Path
intIchi = intIchi + 1
End If

まず初めに、FileSystemObjectでファイル名を取得しています。

FileSystemObjectはファイルやフォルダを操作したり、情報を取得するオブジェクトとなり、
このオブジェクトをインスタンスにセットします。

Set objfFSO = CreateObject(“Scripting.FileSystemObject”)

タカヒロ
タカヒロ
この箇所でエラーとなった場合は、VBEを開き、ツール>参照設定へアクセスし、
「Microsoft Scripting Runtime」にチェックを入れてください。

Filesプロパティ対象フォルダのファイルオブジェクトをセットします。

Set objFiles = objfFSO.GetFolder(strFolderpass).Files

ファイルオブジェクトから一件づつファイル情報を取り出していきます。

取り出した情報から拡張子の有無をチェックし、拡張子がない場合はフォルダと判断しフォルダ名をセルへ出力します。

If InStr(objFile.Name, “.”) = 0 Then
Cells(intIchi, 1) = objFile.Name
Cells(intIchi, 2) = objFile.Path
intIchi = intIchi + 1
End If

サブフォルダ分も同様に処理していきます。

サブフォルダ内のフォルダ名がある場合に処理を継続していきます。



VBAの実装手順

実装手順は以下の通りです。

今回はExcel側にこのVBAを実装します。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。


さいごに

いかがでしょうか。

今回は、
Excel VBAでサブフォルダを含むフォルダ内のフォルダ名を取得する方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です