【VBA】(階層的な)フォルダが存在しない場合、(階層的な)フォルダを作成する

例えばtempフォルダ配下に
(階層的な)フォルダ「folder01\folder02\folder03」が
存在しない場合…

tempフォルダ配下にフォルダが無い状態


(階層的な)フォルダを
作成できます!

(階層的な)フォルダ「folder01\folder02\folder03」を作成
(階層的な)フォルダ「folder01\folder02\folder03」を作成
PR

VBAコード

処理を以下の2つに分けて作成します。

2つの処理
  • メイン処理
    ・役割は「作成する(階層的な)フォルダの指定」

  • (階層的な)フォルダ作成処理
    ・役割は「親フォルダに対する再帰処理」と「フォルダの作成」


呼び出し関係は以下です。

呼び出し関係
呼び出し関係


ソースコードは以下です。

Option Explicit

Sub main()
    
    Dim folder As String
    
    'フォルダ名を指定
    folder = "C:\Users\user\Desktop\temp\folder01\folder02\folder03"
    
    '(階層的な)フォルダ作成処理(再帰的)を呼び出し
    Call createFolders(folder)

End Sub

'-------------------------------------
'(階層的な)フォルダ作成処理
'-------------------------------------
Function createFolders(ByVal folder As String)
    
    Dim fso As Object
    Dim parentFolder As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '親フォルダを取得
    parentFolder = fso.GetParentFolderName(folder)
    
    '親フォルダが存在しない場合
    '親フォルダを対象に自身を再呼び出し(再帰)
    If Not fso.FolderExists(parentFolder) Then
        Call createFolders(parentFolder)
    End If
    
    'フォルダが存在しない場合のみ作成
    If Not fso.FolderExists(folder) Then
        fso.createFolder folder
    End If
    
    '後片付け
    Set fso = Nothing
    
End Function

「(階層的な)フォルダ作成処理」の名前を「createFolders」にしています(18行目)。
※複数のフォルダを作成する処理のため、複数形(s)にしています。
※「FileSystemObject」の「createFolder」メソッド と名前が重複しないようにしています。

「FileSystemObject」の「GetParentFolderName」メソッドにより、作成対象フォルダの親フォルダを取得しています(26行目)。

対象フォルダの親フォルダが存在しない場合、親フォルダを作成するために再帰的に処理を呼び出しています(30~32行目)。

「FileSystemObject」の「createFolder」メソッドにより、フォルダを作成しています(36行目)。

PR

実行結果

(階層的な)フォルダ作成を作成できました。

実行結果
実行結果
PR

参考①

フォルダの存在有無の確認は、以下の記事を参考にしました。

PR

参考②

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「FileSystemObject」の「GetParentFolderName」メソッド


●「FileSystemObject」の「createFolder」メソッド

タイトルとURLをコピーしました