VBA フォルダ作成(MkDir)

スポンサーリンク
スポンサーリンク

■ 基本構文

MkDir path
  • path:作成するフォルダの完全パス(文字列)

■ 基本例:フォルダの作成

Sub フォルダ作成例()
MkDir "C:\Users\YourName\Documents\新しいフォルダ"
End Sub

このコードを実行すると、指定されたパスに "新しいフォルダ" が作成されます。


■ 注意点①:親フォルダが存在している必要がある

' このコードはエラーになります(中間のフォルダが存在しない場合)
MkDir "C:\Users\YourName\Documents\2025\06\14"
  • MkDir は、一階層ずつしかフォルダを作成できません。
  • 202506 など中間のフォルダが存在していないと「パスが見つかりません」エラーになります。

■ 対処法:フォルダが存在しなければ作成する

Sub フォルダ存在チェックと作成()
Dim folderPath As String
folderPath = "C:\Users\YourName\Documents\レポート"

If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
MsgBox "フォルダを作成しました。"
Else
MsgBox "フォルダはすでに存在します。"
End If
End Sub
  • Dir(path, vbDirectory) でフォルダの存在を確認。
  • 存在しない場合にのみ MkDir を実行。

■ 応用例:階層フォルダの自動作成(上級)

中間の親フォルダがない場合も含めて、階層ごとにフォルダを作成する方法:

Sub 階層フォルダ作成()
Dim fullPath As String
fullPath = "C:\Users\YourName\Documents\業務\2025\06\14"

Dim parts() As String
Dim i As Integer
Dim buildPath As String

parts = Split(fullPath, "\")
buildPath = parts(0) & "\" ' 最初のドライブ部分(例:C:\)

For i = 1 To UBound(parts)
buildPath = buildPath & parts(i) & "\"
If Dir(buildPath, vbDirectory) = "" Then
MkDir buildPath
End If
Next i

MsgBox "階層フォルダをすべて作成しました。"
End Sub

このマクロは、C:\Users\YourName\Documents\業務\2025\06\14 のようなパスにおいて、すべての階層を一つずつ確認し、必要に応じて作成します。


■ エラー処理を加える(重要)

Sub 安全にフォルダ作成()
On Error GoTo エラー処理

Dim folderPath As String
folderPath = "C:\TestFolder"

If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
MsgBox "フォルダ作成成功"
Else
MsgBox "既に存在しています"
End If

Exit Sub

エラー処理:
MsgBox "エラー発生:" & Err.Description
End Sub

■ フォルダ作成後の活用例

作成したフォルダにファイルを保存する:

Sub 新規フォルダにファイル保存()
Dim savePath As String
savePath = "C:\TestFolder"

If Dir(savePath, vbDirectory) = "" Then
MkDir savePath
End If

ThisWorkbook.SaveAs Filename:=savePath & "\作業ファイル.xlsx"
End Sub

■ よくあるエラーと対策

エラー内容原因・対策
パスが見つかりません親フォルダが存在しない → 上記の階層作成法を使う
ファイル名、または番号が不正ですMkDir のパス指定ミス → 末尾に \ を含めない
無効なパスネットワークや特殊記号含む → パスを事前チェック

■ 関連関数・ステートメント

関数・命令役割
Dirフォルダやファイルの存在確認
RmDir空のフォルダを削除
MkDir新しいフォルダを作成
Nameファイルやフォルダの名前を変更
GetAttrファイル属性の取得

■ まとめ

特徴内容
フォルダ作成命令MkDir "フルパス"
親フォルダが必要存在しないとエラーになる
存在チェックには Dir() 使用If Dir(path, vbDirectory) = "" Then MkDir path
複数階層対応には工夫が必要Splitとループで1階層ずつ作成
エラーハンドリング推奨On Error で例外処理を入れると安全
タイトルとURLをコピーしました