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:\フォルダ作成テスト_なし"
フォルダが存在しないので、空白のメセージボックスが表示されました。
次に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 IfVBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAでExcelのリストから複数のフォルダの存在をチェックする方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す