この記事では、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】について解説しました。
マクロの扱いになれ、さらに快適な生活を送っていきましょう!