フォルダを作成する

Googleの検索で「エクセル マクロ フォルダ作成」のキーワードで検索するとMkDirステートメントを利用する方法が上位に出てきます。

MkDirステートメントでフォルダを作成する方法はお勧めしません。
簡単に作成できるAPIのSHCreateDirectoryExを使用した方法をお勧めします。

APIとはWindowsの機能を利用する方法です。
その方法が以下になります。

Declare PtrSafe Function SHCreateDirectoryEx Lib “shell32” Alias “SHCreateDirectoryExA” (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Long) As Long

Sub フォルダ作成()
  Dim rc As Long
  Dim Path As String

  Path = “D:\売上\パチンコ\2020年\”
  rc = SHCreateDirectoryEx(0&, Path, 0&)
End Sub

分かりにくいかもしれませんので画像を載せます。

この方法では、すでに同名フォルダが存在していてもエラーになりませんし、その中にファイルが存在していても消えたりする心配はありません。
別のモジュールでもこのテクニックを使う場合は、 Declare PtrSafe Function SHCreateDirectoryEx・・・・・ を 改めて記述する必要はありません。
ブックの中に一つ記述があればどのモジュールからでも利用できます。
ちなみに 「Declare PtrSafe Function・・・」 と PtrSafe を付けています。
こちらを付ける事で Excel 64bit でもエラーになりません。
32bitでも PtrSafe を付けても問題ありません。

 

MkDirステートメントを使用した方法も説明します。

Dドライブにフォルダ名「売上」を作成する場合
 MkDir “D:\売上”
とします。売上の後にパスの区切りを表す \(エンマーク)を付けても問題ありません。
 MkDir “D:\売上\”

Dドライブの中にすでに「売上」フォルダが存在する状態で MkDir “D:\売上\” を実行するとエラーになります。
それは、同じ階層の中に同じ名前のフォルダは存在させることが出来ないからです。
そのため売上フォルダが存在するか判断して、存在しない場合作成を行う必要があります。

以下がサンプルです。(フォルダの存在確認)

Sub フォルダ作成()
  Dim FSO As Object
  Set FSO = CreateObject(“Scripting.FileSystemObject”)

  If FSO.FolderExists(“D:\売上\”) = False Then
    ’フォルダが存在しない場合フォルダを作成
    MkDir “D:\売上\”
  End If
  Set FSO = Nothing
End Sub

D:\売上\パチンコ\2020年 のフォルダを作成する場合
 MkDir “D:\売上\パチンコ\2020年\”
としますが、Dドライブにフォルダ「売上」が存在しない場合エラーになります。
そのため、フォルダを一つ一つ作成する必要があり以下のようになります。

Sub フォルダ作成()
  Dim FSO As Object
  Set FSO = CreateObject(“Scripting.FileSystemObject”)

  If FSO.FolderExists(“D:\売上\パチンコ\2020年\”) = False Then
    ’フォルダが存在しない場合の処理
    MkDir “D:\売上\”
    MkDir “D:\売上\パチンコ\”
    MkDir “D:\売上\パチンコ\2020年\”
  End If
  Set FSO = Nothing
End Sub

とても面倒です。

一発で必要なフォルダを作成する方法APIがお薦めです。