この記事ではエクセルVBAでフォルダの作成・削除を行う方法について説明しています。各見出しをクリックすると記事にジャンプできます。
フォルダの作成
フォルダを作成する方法を説明します。
◆マクロ実行前のフォルダの状態
実行するマクロファイルが置いてあるフォルダ内に本日の日付のフォルダを作成していきます。
◆VBAコード
VBAコードは下のように書きます。
Sub Sample()
'***********************************
'フォルダの作成
'***********************************
Dim ForlderPath As String
'作成するフォルダパスを変数にセット
ForlderPath = ThisWorkbook.Path & "\" & Format(Now(), "yyyyMMdd")
'作成するフォルダパスがない場合
If Dir(ForlderPath, vbDirectory) = "" Then
'フォルダを作成する
MkDir ForlderPath
End If
End Sub
今回は実行するマクロブックが置いてあるフォルダの下に作成するので、Thisworkbook.Pathのうしろに本日の日付を作成してくっつけて変数に格納しています。
フォルダの作成は「MkDir フォルダ名」で作成できます。
すでに同じ名前のフォルダがある場合、「パス名が無効です。」のエラーが出力されてしまうので、先に作成するフォルダが存在するかを確認して、存在しない場合、フォルダを作成するようにします。
▽エラーが出ないように確認する
◆マクロ実行後のフォルダの状態
本日の日付の「20240831」フォルダが作成されました。
フォルダの削除
次はフォルダを削除する方法について説明します。
◆マクロ実行前のフォルダの状態
先ほど作成した今日の日付のフォルダ「20240831」を削除してみたいと思います。
◆VBAコード(空のフォルダの場合)
VBAコードは下のように書きます。
フォルダの削除は空のフォルダを削除する場合と、中にサブフォルダやファイルがある場合とで別の方法を説明します。下のコードは空のフォルダの場合はうまくいきますが、中にサブフォルダやファイルがある場合はエラーになってしまいます。
Sub Sample()
'***********************************
'フォルダの削除(空のフォルダの場合)
'***********************************
Dim ForlderPath As String
'削除するフォルダパスを変数にセット
ForlderPath = ThisWorkbook.Path & "\" & Format(Now(), "yyyyMMdd")
'削除するフォルダパスがある場合
If Dir(ForlderPath, vbDirectory) <> "" Then
フォルダを削除する
RmDir ForlderPath
End If
End Sub
削除するフォルダがないと「パスが見つかりません。」のエラーが出力されてしまうので、削除しようとしているフォルダが存在するかを先に確認してから削除を行います。
◆VBAコード(サブフォルダ・ファイルが入っているフォルダ削除の場合)
削除するフォルダの中にファイルやサブフォルダが入っている場合は下のコードでフォルダごと削除が可能です。
Sub Sample()
'***********************************
'フォルダの削除(サブフォルダ・ファイルあり)
'***********************************
Dim ForlderPath As String
Dim fso As Object
'削除するフォルダパスを変数にセット
ForlderPath = ThisWorkbook.Path & "\" & Format(Now(), "yyyyMMdd")
'FileSystemObjectのインスタンスを作成
Set fso = CreateObject("Scripting.FileSystemObject")
'削除するフォルダパスがある場合
If Dir(ForlderPath, vbDirectory) <> "" Then
'エラーの場合は「Err:」にジャンプする
On Error GoTo Err
'フォルダの削除を実行
fso.DeleteFolder ForlderPath, True
End If
Set fso = Nothing
Exit Sub
Err:
MsgBox "フォルダを削除できませんでした。" & vbLf & "フォルダ内のファイルが開かれている可能性があります。"
Set fso = Nothing
End Sub
こちらのコードではFileSystemObjectを使用して、フォルダごと削除を行っています。
フォルダごと削除する場合は、中のファイルを誰かが開いていたりするとエラーになってしまいますので、エラーになったらエラーメッセージを出して処理を中止するフローを作っておいた方が安心です。
◆マクロ実行後
「20240831」フォルダが削除されたことが分かります。
フォルダの存在確認
フォルダの作成・削除の中でも使用しましたが、改めて説明します。
フォルダの存在確認を行うときは下のように書きます。
下のコードではフォルダがある場合とない場合で処理を分岐させてメッセージを分けています。
Sub Sample()
'***********************************
'フォルダの存在確認
'***********************************
Dim ForlderPath As String
'確認するフォルダパスを変数にセット
ForlderPath = ThisWorkbook.Path & "\" & Format(Now(), "yyyyMMdd")
'フォルダの存在確認
If Dir(ForlderPath, vbDirectory) <> "" Then
MsgBox "フォルダが存在します。"
Else
MsgBox "フォルダが存在しません。"
End If
End Sub
関連記事(フォルダの移動・コピー)
フォルダの移動・フォルダのコピーについては下の記事で紹介しています。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。
・記事の内容は適宜変更することがありますのでご了承ください。