フォルダ存在チェック方法は2通り
VBAでファイル関連の操作を行う際に、フォルダの存在を確認したい場合があります。
フォルダの存在チェックの方法には2通りあります。
1つはFileSystemObjectのFolderExists関数を利用する方法。もう1つはDir関数を利用する方法です。
FolderExistsとDirのどちらを使うべきか
FileSystemObjectのFolderExists関数とDir関数にはいずれも一長一短があります。
Dir関数はワイルドカードの*が指定できますが、FileSystemObjectはできません。
しかし、ファイル名の存在以外にもファイル関連の情報を調べる必要があるのであればFileSystemObjectを利用した方がよいでしょう。
なお、FileSystemObjectを利用する場合は、VBA画面のツールメニュー→参照設定で、Microsoft Scripting Runtimeにチェックを付ける必要があります。
Dir関数でのフォルダ存在チェック方法
Dir関数を利用する場合です。
Dir関数の引数にフォルダパスとディレクトリであることを示す定数を渡します。
その結果が未設定であればフォルダが存在しないとみなし、そうでなければフォルダが存在するとみなします。
引数1:(IN) チェック対象フォルダパス
戻り値:チェック結果(True:フォルダが存在する、False:フォルダが存在しない)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Public Function IsExistDirA(a_sFolder As String) As Boolean Dim result result = Dir(a_sFolder, vbDirectory) If result = "" Then '// フォルダが存在しない IsExistDirA = False Else '// フォルダが存在する IsExistDirA = True End If End Function |
利用例です。
上記の関数にフォルダパスを渡して、フォルダ存在チェック結果を取得します。
1 2 3 4 5 6 7 8 |
Sub IsExistDirA利用例() Dim a Dim bResult As Boolean a = "C:\aaa*" bResult = IsExistDirB(a) End Sub |
FileExistsでのフォルダ存在チェック方法
次に、FileSystemObjectのFileExists関数を利用する場合です。
CreateObjectを1度だけ処理するようにするために、呼び出し元でFileSystemObjectの変数を定義しています。
引数1:(IN/OUT) FileSystemObject変数
引数2:(IN) チェック対象フォルダパス
戻り値:チェック結果(True:フォルダが存在する、False:フォルダが存在しない)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Public Function IsExistDirB(oFso, a_sFolder As String) As Boolean If (oFso Is Nothing) Then Set oFso = CreateObject("Scripting.FileSystemObject") End If If (oFso.FolderExists(a_sFolder) = False) Then '// フォルダが存在しない IsExistDirB = False Else '// フォルダが存在する IsExistDirB = True End If End Function |
利用例です。
上記の関数にフォルダパスを渡して、フォルダ存在チェック結果を取得します。
1 2 3 4 5 6 7 8 9 |
Sub IsExistDirB利用例() Dim oFso As FileSystemObject Dim a Dim bResult As Boolean a = "C:\aaaa" bResult = IsExistDirB(oFso, a) End Sub |