フォルダを取り扱うプログラムを書く場合、必ずフォルダの存在チェックを実施しましょう。
FileSystemObjectのFolderExistsメソッドを使用するのがオススメです。
具体的な使用方法を解説しますので、ぜひ最後までお付き合いください。
- フォルダの存在チェックの方法が分かります。
- 類似機能であるDir関数との違いを解説します。
FileSystemObject FolderExistsメソッド
フォルダの存在チェックは、FileSystemObjectのFolderExistsメソッドを使用します。
構文
FileSystemObject.FolderExists(folderspec)
引数
# | 引数 | 必須 | 詳細 |
1 | filespec | ○ | 調べたいフォルダのパスを指定します。 絶対パス、相対パスの両方を指定可能です。 |
戻り値
- フォルダが存在する場合:True
- フォルダが存在しない場合:False
サンプルコード
前提
以下のようなフォルダ構成であることが前提として解説していきます。
フォルダ存在チェック(絶対パス指定)
マクロ本体と同列のフォルダに配置されている、「vba-hack」フォルダを絶対パスで存在をチェックするサンプルコードです。
前提のフォルダ構成の場合はTrueとなり、「フォルダが存在します。」というメッセージボックスが出力されます。
サンプルコード
Public Sub checkFolderExist()
Dim FSO As Object ' FileSystemObject
Dim folderPath As String ' チェック対象フォルダパス
' FileSystemObjectインスタンス生成
Set FSO = CreateObject("Scripting.FileSystemObject")
' フォルダパス生成
folderPath = ThisWorkbook.Path & "\vba-hack"
If FSO.FolderExists(folderPath) Then
' フォルダが存在する場合
MsgBox "フォルダが存在します。", vbInformation
Else
' フォルダが存在しない場合
MsgBox "フォルダが存在しません。", vbInformation
End If
End Sub
フォルダ存在チェック(相対パス指定)
FolderExistsメソッドでは、相対パスも使用できます。
以下は、カレントディレクトリを マクロ本体が配置されているディレクトリに移動した後、フォルダの存在チェックを実施しています。
サンプルコード
Public Sub checkFolderExist()
Dim FSO As Object ' FileSystemObject
Dim folderPath As String ' チェック対象フォルダパス
' FileSystemObjectインスタンス生成
Set FSO = CreateObject("Scripting.FileSystemObject")
' カレントディレクトリを マクロ本体が配置されているディレクトリに変更
ChDir ThisWorkbook.Path
If FSO.FolderExists(".\vba-hack") Then
' フォルダが存在する場合
MsgBox "フォルダが存在します。", vbInformation
Else
' フォルダが存在しない場合
MsgBox "フォルダが存在しません。", vbInformation
End If
End Sub
Dir関数の使用を推奨しない理由
本記事では、FileSystemObjectをご紹介していますが、Dir関数でも同じチェックが可能です。
ただしDir関数では、「\\」から始まるネットワークドライブの検索ができません。
従いまして、今回はFolderExistsメソッドのご紹介をいたしました!
最後に
いかがでしたでしょうか。
予期せぬエラーを発生しないためにも、フォルダの存在チェックは必ず実施してください!
この記事が、読者さまのお力になれれば嬉しいです!
コメント