【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する

file folder

photo credit: andrewasmith B is for Buzzcocks via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法をシリーズでお伝えしています。

前回の記事はこちら。

429 Too Many Requests

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

サンプルとして使用するフォルダ

前述のプログラムの「処理」の部分で、特定のファイルまたはフォルダが存在するかどうかを判定する処理をいれるというのが、今回のお題となります。

サンプルとして以下フォルダを使用します。

FileSystemオブジェクトで操作するフォルダ

マクロを記述するエクセルファイル本体のほか

  • pdfフォルダ
  • xlsxフォルダ
  • テキストファイル.txt
  • ページ.html
  • ワード.docx

というフォルダまたはファイルの構成となっています。

FileExistsメソッドでファイルの存在を判定する

FileSystemオブジェクトを使ってファイルの存在を判定するには、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メソッドと使い方は大変似ていまして、書き方はこうです。

FileSystemオブジェクト.FolderExists(フォルダパス)

フォルダパスで指定したフォルダが存在すれば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メソッド:フォルダの存在を判定する

次回は、フォルダが存在していなかったときに、作成をする方法についてお伝えします。

429 Too Many Requests

どうぞお楽しみに!

連載目次:FileSystemオブジェクトでフォルダやファイルを操作する

ファイルやフォルダを操作するのはデリケートな気がしますが、エクセルVBAではFileSystemオブジェクトを使うことでファイル、フォルダ、ドライブをオブジェクトとして安全にそして細やかに操作をすることができます。 このシリーズでは、FileSystemオブジェクトの様々な活用法についてシリーズでお伝えしていきます。
  1. 【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
  2. 【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
  3. 【エクセルVBA】指定のフォルダが存在するか判定して、存在してなければ作成する方法
  4. 【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
  5. 【エクセルVBA】FileSystemオブジェクトでフォルダ内のサブフォルダ一覧を取得する
タイトルとURLをコピーしました