みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法をシリーズでお伝えしています。
前回の記事はこちら。
FileSystemオブジェクトとは何かといった基本の部分と、パっと使える便利なメソッドをいくつかお伝えしました。
今回ですが、指定のファイルやフォルダの存在確認をやってみたいと思います。
以前、Dir関数を使った方法はお伝えしていたのですが、Dir関数は色々と制約もありますし、今回紹介するFileSystemオブジェクトのメソッドを使ったほうがシンプルに表現できます。
では、エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダが存在するかを確認する方法についてお伝えします。
行ってみましょう!
前回のおさらい:FileSystemオブジェクトの生成と破棄
前回お伝えしましたが、FileSystemオブジェクトを使う場合はオブジェクトの生成をする必要がありました。
以下プログラムでは、objFsoという名前でFileSystemオブジェクトを生成し、そして破棄するというものです。
Sub FSOを使う()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
'処理
Set objFso = Nothing
End Sub
サンプルとして使用するフォルダ
前述のプログラムの「処理」の部分で、特定のファイルまたはフォルダが存在するかどうかを判定する処理をいれるというのが、今回のお題となります。
サンプルとして以下フォルダを使用します。
マクロを記述するエクセルファイル本体のほか
- pdfフォルダ
- xlsxフォルダ
- テキストファイル.txt
- ページ.html
- ワード.docx
というフォルダまたはファイルの構成となっています。
FileExistsメソッドでファイルの存在を判定する
FileSystemオブジェクトを使ってファイルの存在を判定するには、FileExistsメソッドを使います。
書き方はこうです。
ファイルパスで指定したファイルが存在していればTrue、そうでなければFalseが返ります。
ファイルパスには絶対パス、相対パスいずれも指定することができます。
ですが、相対パスの基点となるカレントフォルダは、Excelのオプションで「既定のローカルファイルの保存場所」に指定されているフォルダになりますので、実際に使用する機会は少ないのではないかと思います。
では、実際にプログラムで使ってみましょう。
Sub ファイルの存在確認をする()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Debug.Print objFso.FileExists(ThisWorkbook.Path & "\テキストファイル.txt") 'True
Debug.Print objFso.FileExists(ThisWorkbook.Path & "\text.txt") 'Flase
Set objFso = Nothing
End Sub
ソースコード内でコメントしている通り、「テキストファイル.txt」は同フォルダに存在しているのでTrue、「text.txt」は存在していないのでFalseがイミディエイトウィンドウに出力されます。
実際にIf文で判定する場合はこんな感じですね。
Sub ファイルの存在確認をする()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
If objFso.FileExists(ThisWorkbook.Path & "\テキストファイル.txt") Then
MsgBox "テキストファイル.txtは存在しています"
Else
MsgBox "テキストファイル.txtは存在していません"
End If
Set objFso = Nothing
End Sub
FolderExistsメソッドでフォルダが存在するかを判定する
FileSystemオブジェクトを使ってフォルダの存在確認をするには、FolderExistsメソッドを使います。
FileExistsメソッドと使い方は大変似ていまして、書き方はこうです。
フォルダパスで指定したフォルダが存在すればTrue、さもなくばFlaseが返ります。こちらも絶対パス、相対パスともに使用可能です。
サンプルプログラムはこちら。
Sub フォルダの存在確認をする()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\pdf") 'True
Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\エクセル") 'Flase
Set objFso = Nothing
End Sub
pdfフォルダは存在するのでTrue、エクセルフォルダは存在しないのでFalseがイミディエイトウィンドウに出力されます。
If文を使った例はこちらです。
Sub フォルダの存在確認をする()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then
MsgBox "フォルダpdfは存在しています"
Else
MsgBox "フォルダpdfは存在していません"
End If
Set objFso = Nothing
End Sub
まとめ
以上、エクセルVBAのFileSystemオブジェクトを使ってファイルまたはフォルダの存在を確認する方法についてお伝えしました。
二つのメソッドを紹介しました。
- FileExistsメソッド:ファイルの存在を判定する
- FolderExistsメソッド:フォルダの存在を判定する
次回は、フォルダが存在していなかったときに、作成をする方法についてお伝えします。
どうぞお楽しみに!