VBATips

「指定フォルダが存在しなければフォルダ作成」処理をパーツ化する【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

Public Function Call_MkDir(sPath As String)
    Dim tmp As String
    Dim arr() As String
    arr = Split(sPath, "\")
    
    tmp = arr(0)  ' ドライブ名(例C:)を入れる

    Dim i As Long
    For i = LBound(arr) + 1 To UBound(arr)
        tmp = tmp & "\" & arr(i)
        If Dir(tmp, vbDirectory) = "" Then        'フォルダが存在しなければMkDir(フォルダ作成)
            MkDir tmp
        End If
    Next i
End Function

使い方

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Public Sub sample()
    Call Call_MkDir("C:\log\2021\09")'C:\log\2021\09を階層で作成する(サブフォルダ毎作成する)
End Sub

結果イメージ

指定フォルダ(ディレクトリ)に「指定したフォルダ」が存在していなければMkDir(フォルダを作成)します。

注意点

  • サブフォルダ(階層)を含めて作成します。
  • MkDirは階層の深いフォルダを一気に作成することはできないため、Loop処理します。

関連記事

コメント

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