Excel

【Excel】VBAマクロでフォルダ名を取得(フォルダ内の:サブフォルダも:一覧に:階層:すべて取得しセルに追記・入力)する方法【Dir, FileSystemObject, GetFolder, SubFolders】

当サイトでは記事内に広告を含みます

この記事では、VBAマクロを使ってフォルダ名を取得し、Excelシートに追記・入力する方法(サブフォルダを含む場合も)について解説していきます。

ポイントとしては、

Dir関数、FileSystemObject

を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

 

VBAマクロで指定フォルダ内の階層のフォルダ名をすべて取得し、シート1のB2セルから順番に追記していく方法

それではまず、VBAマクロを使って指定フォルダ内の階層のフォルダ名をすべて取得し、シート1のB2セルから順番に追記していく方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub GetFolderNames()
    'Dir関数を使ってフォルダ名を取得する
    Dim saisyoNoBasyo As String
    saisyoNoBasyo = "C:\Sample" 'フォルダのパスを指定
    
    Dim iFolderCount As Integer
    iFolderCount = 1
    
    Dim folderMei As String
    folderMei = Dir(saisyoNoBasyo, vbDirectory)
    
    Do While folderMei <> ""
        If folderMei <> "." And folderMei <> ".." Then
            Cells(1 + iFolderCount, 2).Value = folderMei 'B2セルから順にフォルダ名を追記
            iFolderCount = iFolderCount + 1
        End If
        folderMei = Dir() 'フォルダ名を順番に取得
    Loop
End Sub

コードのAlt+F8を押し、マクロ選択画面でGetFolderNames関数を実行します。

 

このコードでは、最初にDir関数を使って指定したフォルダパス(saisyoNoBasyo)のフォルダ名を取得します。

取得したフォルダ名は、Do Whileループ内でCells関数を使ってB2セルから順番にシート1へ追記していきます。

“.”と”..”は、現在のフォルダと親フォルダを示すため、If文で除外しています。

 

VBAマクロで指定フォルダ内の階層のフォルダ名やそのサブフォルダ階層のフォルダ名もすべて取得し、シート1のB2セルから順番に追記していく方法

続いては、VBAマクロを使って指定フォルダ内の階層のフォルダ名やそのサブフォルダ階層のフォルダ名もすべて取得し、シート1のB2セルから順番に追記していく方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

  
Sub GetAllFolderNames()
    'FileSystemObjectを使って階層下のすべてのフォルダ名を取得
    Dim oFileSys As Object
    Set oFileSys = CreateObject("Scripting.FileSystemObject")
    
    Dim saisyoNoBasyo As String
    saisyoNoBasyo = "C:\Sample" 'フォルダのパスを指定
    
    Dim topFolder As Object
    Set topFolder = oFileSys.GetFolder(saisyoNoBasyo)
    
    Dim iFolderCount As Integer
    iFolderCount = 1
    
    Call GetSubFolders(topFolder, 2, iFolderCount)
End Sub

Sub GetSubFolders(ByVal oParentFolder As Object, ByVal iColumn As Integer, ByRef iFolderCount As Integer)
    ' 再帰処理で階層下のすべてのフォルダ名を取得
    Dim oSubFolder As Object
    
    For Each oSubFolder In oParentFolder.SubFolders
        Cells(iFolderCount, iColumn).Value = oSubFolder.Name 'フォルダ名をセルに追記
        iFolderCount = iFolderCount + 1
        Call GetSubFolders(oSubFolder, iColumn + 1, iFolderCount) '再帰的に次のサブフォルダを処理
    Next oSubFolder
End Sub  

コードのAlt+F8を押し、マクロ選択画面でGetAllFolderNames関数を実行します。

 

 

まとめ

このコードでは、FileSystemObjectを使って階層下のすべてのフォルダ名を取得します。

最初に指定したフォルダパスをGetFolder関数で取得し、GetSubFolders関数を呼び出して再帰的に処理します。

GetSubFolders関数内では、SubFolders プロパティを使ってサブフォルダを取得し、そのフォルダ名をCells関数でセルに追記します。

iColumn変数は、階層の深さに応じてセルの列を右にずらすために使用しています。

次に自分自身のGetSubFolders関数を呼び出すことで、サブフォルダ内のフォルダも再帰的に処理し、階層構造を保ったまますべてのフォルダ名を取得します。

 

 

まとめ VBAマクロでフォルダ名を取得(サブフォルダも:一覧に:階層:すべて取得しセルに追記・入力)する方法【Dir, FileSystemObject, GetFolder, SubFolders】

この記事では、VBAマクロでフォルダ名を取得(フォルダ内の:サブフォルダも:一覧に:階層:すべて取得しセルに追記・入力)する方法【Dir, FileSystemObject, GetFolder, SubFolders】について解説しました。

マクロの扱いになれ、さらに快適な生活を送っていきましょう!