【Excel VBA】フォルダの存在チェックをする方法!

VBAでフォルダの存在をチェックしたいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAでフォルダの存在をチェックしたいが方法がよくわからない
・VBAで複数のフォルダの存在をチェックしたいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAでフォルダの存在をチェックする方法
・VBAでExcelのリストから複数のフォルダの存在をチェックする方法

についてまとめます!

VBAでフォルダの存在をチェックするイメージ

VBAでフォルダの存在をチェックするイメージについて説明をします。

まずはVBAに直接フォルダのパスを記載し存在有無を確認します。

フォルダがあればフォルダ名を返しメッセージに表示されます。

なければなにも表示されません。

次に1シート目のA列へ複数のフォルダパスを記載し、隣接するB列に存在有無の結果を出力していきます。

VBAを実行すると、

B列に存在有無の結果が出力されます!

大量のフォルダの存在有無を確認したい場合に便利ですね!

それでは早速試してみましょう。

VBAでフォルダの存在をチェックする方法

VBAでフォルダの存在をチェックするについて説明をします。

Dir関数について

使う関数はDir関数となります。

Dir関数は指定したパターンまたはファイル属性に一致するファイル、ディレクトリ、フォルダーの名前、またはドライブのボリューム ラベルを文字列型で返す関数です。

構文と設定パラメータ

Dir関数の構文と設定パラメータは以下の通りです。

関数名 Dir
構文 Dir (pathname, attributes )
設定パラメータ pathname:
省略可能。 ファイル名を指定する文字列式です。ディレクトリまたはフォルダー、およびドライブを含めることができます。 pathname が見つからない場合は、長さ 0 の文字列 (“”) が返されます。
ワイルドカード(”*”または”?” )の指定が可能です。
Attributes:省略可能。 ファイル属性を指定する定数または数式 (合計によって指定) です。 省略した場合は、pathname に一致する、属性のないファイルが返されます。

attributes 引数の設定は以下のとおりです。

定数 説明
vbNormal 0 (既定値) 属性のないファイル。
vbReadOnly 1 属性のないファイルと読み取り専用のファイル。
vbHidden 2 属性のないファイルと隠しファイル。
vbSystem 4 属性のないファイルとシステム ファイル。 Macintosh では使用できません。
vbVolume 8 ボリューム ラベル。他の属性を指定した場合は、vbVolume?は無視されます。 Macintosh では使用できません。
vbDirectory 16 属性のないファイルとディレクトリまたはフォルダー。
vbAlias 64 指定されたファイル名はエイリアスです。 Macintosh でのみ使用できます。

参照:https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dir-function

Dir関数でフォルダの存在チェックをする

早速Dir関数でフォルダの存在チェックをしてみましょう。
サンプルコードは以下の通りです。

Sub フォルダの存在をチェックする()

        'フォルダの存在をチェックしたいフォルダのパスを指定します。
        strPass = "F:\フォルダ作成テスト"

        MsgBox Dir(strPass, vbDirectory)
    
 End Sub

以下にフォルダの存在をチェックしたいフォルダのパスを指定します。まずは存在するフォルダパスを入力します。

strPass = "F:\フォルダ作成テスト"

VBAを実行すると、メッセージボックスにフォルダ名が表示されましたね!

Dri関数は存在する場合はそのフォルダ名やファイル名を返しますので、その有無で存在チェックができるという訳です。

つづいて、存在しないフォルダ名を入力してVBAを実行してみましょう。

strPass = "F:\フォルダ作成テスト_なし"

フォルダが存在しないので、空白のメセージボックスが表示されました。

タカヒロ
タカヒロ
Dir関数を使えば簡単にフォルダの存在チェックができることがわかりましたね。

次にExcelシートにまとめた複数のフォルダパスを一括で存在するかチェックをしてみましょう。

サンプルのシートを準備する

まずは対象となるシートを準備しましょう。
1シート目のA列へ複数のフォルダパスを記載し、隣接するB列に存在有無の結果を出力していきます。

サンプルでは「フォルダ2」フォルダと配下のサブフォルダがないので、

存在チェック欄は「存在しない」が入ることを確認します。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 複数のフォルダの存在をチェックする()
    Dim objWB As ThisWorkbook
    Dim objSheet As Object
    Dim i As Long

    'Excelのブックとワークシートのオブジェクトを設定します。
    Set objWB = ThisWorkbook
     '1シート目のシートを対象にします。
    Set objSheet = objWB.Sheets(1)

     With objSheet

        'A2セルから最終行まで処理を繰り返します。
        For i = 2 To .Cells(1, 1).End(xlDown).Row
        
            'フォルダパスの値がある場合のみ処理をします。
            If .Cells(i, 1) <> "" Then
                'フォルダパスの存在チェック結果を出力します。
                If Dir(.Cells(i, 1), vbDirectory) = "" Then
                    .Cells(i, 2) = "存在しない"
                Else
                    .Cells(i, 2) = "存在する"
                End If
                
            End If
        Next i
        
        MsgBox "フォルダの存在チェックが完了しました!"
    End With
    
    'オブジェクトを解放します。
    Set objWB = Nothing
    Set objSheet = Nothing
    
 End Sub

VBAを設定する

1シート目のシートを対象にします。2シート名にする場合は2を、シート名を指定したい場合は”<シート名>”を入力してください。

Set objSheet = objWB.Worksheets(1)

A2セルから最終行まで処理を繰り返します。A列以外をキーにする場合はCellsの列番号を変えてください。

For i = 2 To .Cells(1, 1).End(xlDown).Row

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

複数のフォルダ存在チェックができましたね!

「フォルダ2」フォルダも「存在しない」となっていることが確認できました!

VBAの説明

VBAについて説明をします。

Excelのブックとワークシートのオブジェクトを設定します。

Set objWB = ThisWorkbook

1シート目のシートを対象にします。

Set objSheet = objWB.Worksheets(1)

A2セルから最終行まで処理を繰り返します。

For i = 2 To .Cells(1, 1).End(xlDown).Row

フォルダ名の値がある場合のみ処理をします。

If .Cells(i, 1) <> "" Then

フォルダパスの存在チェック結果を出力します。

<code> If .Cells(i, 1) <> "" Then
'フォルダパスの存在チェック結果を出力します。
If Dir(.Cells(i, 1), vbDirectory) = "" Then
.Cells(i, 2) = "存在しない"
Else
.Cells(i, 2) = "存在する"
End If
End If

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAでフォルダの存在をチェックする方法
・VBAでExcelのリストから複数のフォルダの存在をチェックする方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です