【VBA】ファイルの存在を確認する方法
更新日:2024/01/18
VBAでファイルが存在するかどうかを確認する方法をお伝えします。
ファイルの存在を確認する関数とメソッド
VBAでファイルの存在を確認する方法は2つあります。
基本的には、1のDir関数を使用します。
2のFileExistsメソッドは、FileSystemObjectオブジェクトを取得する必要があります。
FileSystemObjectオブジェクトを使って何らからの処理を行うとき、FileExistsメソッドの使用を考慮するとよいでしょう。
Dir関数
Dir関数はVBAのファイル操作に関する関数の一つで、引数で指定したパスに一致するファイルやフォルダの名前を取得できます。
構文
Dir関数でファイルが存在するかどうかを確認するときは、次のような構文を使用します。
if Dir( filePath , vbHidden ) <> "" Then ' 存在するときの処理 Else ' 存在しないときの処理 End If
- filePath: 存在確認するファイルのパス
- vbHidden: 定数。省略可能。隠しファイルを確認したいとき使用する。
使用例
Dir関数の使用例です。
Sub dirTest()
Const filePath = "C:\Users\xxx\Documents\image.png"
If Dir(filePath) <> "" Then
Debug.Print "ファイルは存在します"
Else
Debug.Print "ファイルは存在しません"
End If
End Sub
隠しファイルを確認したいときは、次のように第二引数に vbHidden を記述します。
Sub dirTest2()
Const filePath = "C:\Users\xxx\Documents\image.png"
If Dir(filePath, vbHidden) <> "" Then
Debug.Print "ファイルは存在します"
Else
Debug.Print "ファイルは存在しません"
End If
End Sub
ただし、上記の方法は通常ファイルも存在するとして判定されます。
そのため、ファイルが隠しファイルかどうかを判定できません。
Sub dirTest3()
Const filePath = "C:\Users\xxx\Documents\image.png"
If Dir(filePath, vbHidden) <> "" Then
If GetAttr(filePath) And vbHidden Then
Debug.Print "ファイルは隠しファイルです"
Else
Debug.Print "ファイルは隠しファイルではありません"
End If
Else
Debug.Print "ファイルは存在しません"
End If
End Sub
FileExistsメソッド
FileExistsメソッドは外部ライブラリのWindows Script Runtimeに含まれているFileSystemObjectオブジェクトのメンバーです。
FileSystemObjectオブジェクトの取得方法は二つあります。
一つは、文字列"Scripting.FileSystemObject"をCreateObject関数に渡す方法です。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
もう一つはVBエディタのメニュー:ツールから参照設定画面を開いて『Microsoft Scriptiong Runtime』を参照設定してから次のコードを実行する方法です。
Dim fso As New Scripting.FileSystemObject
参照設定をおこなうと、コード入力時にメソッド名候補が表示されます。
入力ミスを防げるので便利です。
構文
FileSystemObjectオブジェクト.FileExists( FileSpec )
- FileSpec: ファイルのパス
FileExistsは、隠しファイルかどうかに関係なく存在確認をおこないます。
使用例
FileExistsメソッドの使用例です。
Sub fileExistsTest()
Const filePath = "C:\Users\xxx\Documents\image.png"
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(filePath) Then
Debug.Print "ファイルは存在します"
Else
Debug.Print "ファイルは存在しません"
End If
End Sub
更新日:2024/01/18
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。