PR

【ExcelVBA】フォルダの作成・削除・存在確認する方法

エクセルVBA-フォルダの作成・削除-アイキャッチ フォルダの操作

この記事ではエクセルVBAでフォルダの作成・削除を行う方法について説明しています。各見出しをクリックすると記事にジャンプできます。

スポンサーリンク

フォルダの作成

フォルダを作成する方法を説明します。

◆マクロ実行前のフォルダの状態

実行するマクロファイルが置いてあるフォルダ内に本日の日付のフォルダを作成していきます。

エクセル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のうしろに本日の日付を作成してくっつけて変数に格納しています。

‘作成するフォルダパスを変数にセット
ForlderPath = ThisWorkbook.Path & “\” & Format(Now(), “yyyyMMdd”)

フォルダの作成は「MkDir フォルダ名」で作成できます。

’フォルダを作成する
MkDir ForlderPath

すでに同じ名前のフォルダがある場合、「パス名が無効です。」のエラーが出力されてしまうので、先に作成するフォルダが存在するかを確認して、存在しない場合、フォルダを作成するようにします。

エクセルVBA-フォルダの作成-パス名が無効ですエラー

▽エラーが出ないように確認する

‘作成するフォルダパスがない場合
If Dir(ForlderPath, vbDirectory) = “” Then
‘(フォルダを作成)
End If

◆マクロ実行後のフォルダの状態

本日の日付の「20240831」フォルダが作成されました。

エクセルVBA-フォルダの作成-実行後のフォルダの状態
スポンサーリンク

フォルダの削除

次はフォルダを削除する方法について説明します。

◆マクロ実行前のフォルダの状態

先ほど作成した今日の日付のフォルダ「20240831」を削除してみたいと思います。

エクセルVBA-フォルダの削除-実行前のフォルダの状態

◆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-フォルダの削除-パスが見つかりませんエラー

◆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を使用して、フォルダごと削除を行っています。
フォルダごと削除する場合は、中のファイルを誰かが開いていたりするとエラーになってしまいますので、エラーになったらエラーメッセージを出して処理を中止するフローを作っておいた方が安心です。

‘エラーの場合は「Err:」にジャンプする
On Error GoTo Err
 ’(フォルダ削除処理)
Err:
MsgBox “フォルダを削除できませんでした。” & vbLf & “フォルダ内のファイルが開かれている可能性があります。”

◆マクロ実行後

「20240831」フォルダが削除されたことが分かります。

エクセルVBA-フォルダの削除-実行後のフォルダの状態
スポンサーリンク

フォルダの存在確認

フォルダの作成・削除の中でも使用しましたが、改めて説明します。
フォルダの存在確認を行うときは下のように書きます。
下のコードではフォルダがある場合とない場合で処理を分岐させてメッセージを分けています。

Sub Sample()
'***********************************
'フォルダの存在確認
'***********************************

    Dim ForlderPath As String
    
    '確認するフォルダパスを変数にセット
    ForlderPath = ThisWorkbook.Path & "\" & Format(Now(), "yyyyMMdd")

    'フォルダの存在確認
    If Dir(ForlderPath, vbDirectory) <> "" Then
      
       MsgBox "フォルダが存在します。"
      
      Else

       MsgBox "フォルダが存在しません。"
        
    End If

End Sub
スポンサーリンク

関連記事(フォルダの移動・コピー)

フォルダの移動・フォルダのコピーについては下の記事で紹介しています。

スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。
・記事の内容は適宜変更することがありますのでご了承ください。

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