Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2075

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

$
0
0
file folder

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

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

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

前回の記事はこちら。

【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
FileSystemオブジェクトを使ってエクセル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

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

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

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

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がイミディエイトウィンドウに出力されます。

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がイミディエイトウィンドウに出力されます。

まとめ

以上、エクセルVBAのFileSystemオブジェクトを使ってファイルまたはフォルダの存在を確認する方法についてお伝えしました。

二つのメソッドを紹介しました。

  • FileExistsメソッド:ファイルの存在を判定する
  • FolderExistsメソッド:フォルダの存在を判定する

次回は、FileSystemオブジェクトを使って特定のフォルダ内のファイル一覧を出力する方法についてお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでFileSystemオブジェクトを活用する

ファイルやフォルダを操作するのはデリケートな気がしますが、エクセルVBAではFileSystemオブジェクトを使うことでファイル、フォルダ、ドライブをオブジェクトとして安全にそして細やかに操作をすることができます。 このシリーズでは、FileSystemオブジェクトの様々な活用法についてシリーズでお伝えしていきます。
  1. 【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
  2. 【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する

Viewing all articles
Browse latest Browse all 2075

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>