ここから本文です

VBA/マクロ便利Tips:VBAでドライブやファイル、フォルダの存在チェックを行う方法

@IT 4/14(金) 6:10配信

 VBAで、指定したドライブやファイル、フォルダが存在するかどうかをチェックする方法を解説する。

・ドライブの存在チェックを行うDriveExistsメソッド
・ファイルの存在チェックを行うFileExistsメソッド
・フォルダの存在チェックを行うFolderExistsメソッド

●ドライブの存在チェックを行うDriveExistsメソッド

 任意のドライブが存在するかどうかをチェックするには、DriveExistsメソッドを使用する。書式は下記のようになる。

○DriveExistsメソッドの書式
{fso}.DriveExists ({drivespec})

 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {drivespec}も必須だ。ドライブ文字を指定する。

 指定したドライブが存在する場合はTrue、それ以外の場合はFalseを返す(※リムーバブルメディアを使用するドライブの場合、DriveExistsメソッドはメディアが存在しなくてもTrueを返す)。

 VBEを起動して、いつものように「挿入」メニューから「標準モジュール」を選択して、Module1を作成し、リスト1のコードを記述する。新規にModuleを作成した場合は、冒頭で紹介したTIPSで説明した「Microsoft Scripting Runtimeの参照設定」を行うことを忘れないでほしい。

・「J:\」が存在するかをチェックするコード
--
Sub ドライブの有無の確認()
Dim fso As New Scripting.FileSystemObject
If fso.DriveExists("J:\") = True Then
MsgBox "J:\ドライブは存在します。"
Else
MsgBox "J:\ドライブは存在しません。"
End If
Set fso=Nothing
End Sub
--

 上記で「J:\」と指定している箇所は、単に「J」と記述しても問題はない。

 新しいScripting.FileSyetemObjectのインスタンスを作成してfsoで参照する(2行目)。

 DriveExistsメソッドで「J:\」が存在するかどうかをチェックして、戻り値によって条件分岐を行う(3~7行目)。

 最後にNothingでオブジェクト変数をクリアする(8行目)。


●ファイルの存在チェックを行うFileExistsメソッド

 任意のファイルが存在するかどうかをチェックするには、FileExistsメソッドを使用する。書式は下記のようになる。

○FileExistsメソッドの書式
{fso}.FileExists({filespec})

 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {filespec}も必須だ。存在するかどうかを調べるファイルの名前を指定する。

 指定したファイルが存在する場合は、Trueを返し、存在しない場合は、Falseを返す。

・リスト2 任意のファイルが存在するかをチェックするコード
--
Sub 任意のファイルが存在するかをチェックする
Dim fso As New Scripting.FileSystemObject
Dim myFile As String
myFile=”K:\ExcelVBA_TextFiles\FileSystemObject_SourceFile.txt”
If (fso.FileExists(myFile)) Then
MsgBox myFile & “は存在します。"
Else
MsgBox myFile & "は、存在しません。"
End If
Set fso=Nothing
End Sub
--

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 文字列型の変数myFileを宣言し、チェックするファイル名をフルパスで格納しておく(3~4行目)。

 FileExistsメソッドで、変数myFileに格納したファイルが存在するかどうかをチェックして、戻り値で条件分岐を行う。存在しているか否かを表示する(5~9行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(10行目)。

 実行すると図2のように表示される。各自が試す場合は、各自のフィルダ内にあるファイルを指定してほしい。このコードのまま実行するとエラーになる可能性があるので注意が必要だ。

●フォルダの存在チェックを行うFolderExistsメソッド

 任意のフォルダの存在するかどうかをチェックするには、FolderExistsメソッドを使用する。書式は下記のようになる。

○FolderExistsメソッドの書式
{fso}.FolderExists({folderspec})

 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {filespec}も必須だ。存在するかどうかを調べるフォルダの名前を指定する。

 指定したフォルダが存在する場合は、Trueを返し、存在しない場合は、Falseを返す。

・任意のフォルダが存在するかをチェックするコード
--
Sub 任意のフォルダが存在するかをチェックする
Dim fso As New Scripting.FileSystemObject
Dim myFolder As String
myFolder=”K:\ExcelVBA_TextFiles\”
If (fso.FolderExists(myFolder)) Then
MsgBox myFolder & “は存在します。"
Else
MsgBox myFolder & "は、存在しません。"
End If
Set fso=Nothing
End Sub
--

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 文字列型の変数myFolderを宣言し、チェックするフォルダ名をフルパスで格納しておく(3~4行目)。

 FolderExistsメソッドで、変数myFolderに格納したフォルダが存在するかどうかをチェックして、戻り値で条件分岐を行う。存在しているか否かを表示する(5~9行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(10行目)。

 各自が試す場合は、各自のPC内にあるフォルダを指定してほしい。このコードのまま実行するとエラーになる可能性があるので注意してほしい。

●次回は、ファイルの拡張子とファイルとファイル名を取得について

 今回は、ドライブやファイル、フォルダが存在するかを確認する方法を紹介した。使用するメソッドが異なるだけで、記述方法は全く同じなので、理解はしやすいだろうと思う。見て分かるように、何かが存在するかどうかをチェックするには、必ず、最後にExists(存在する)というワードが付いているので、分かりやすいと思う。記憶するのも容易だし、TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」で紹介した自動メンバーから探し当てるのも簡単だ。

 この中で特に、ファイルが存在するかどうかをチェックするは、日常の業務でも使えると思う。たくさんのファイルの存在するフォルダの中から、自分の探したいファイルを見つけたい場合は、シートにフォーム画面を作成しておいて、ファイル名を入力すると、存在しているかどうかのメッセージを表示させるようにしておくと便利だろう。

※本Tipsの環境:Windows 10 64bit+Anniversary Update、Excel 2016

最終更新:4/14(金) 6:10

@IT