器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】ファイルの存在有無を確認するマクロ

◇前置き

VBAでマクロを組む際、.csvや.txt等のファイルからデータを参照することってありませんか?
私はよくあります。

データ参照(インポート含む)の流れはざっくりこんな感じです。

①参照するファイルパス(ファイル名)を指定
②データ参照を実行

この流れの中で、指定した名前のファイルが存在しなければ実行時エラーが出ます。
↑デバックか終了を選ぶメッセージボックスです。

コードを読める人であれば、デバックから「あぁ、ファイルがないのか。」とすぐわかりますが、読めない人はパニックになること必至です。

今回はこのエラーを回避し、「ファイルがないよ!」と知らせてくれるマクロを紹介します。

◇概要

こんなExcelを用意しました。

ファイルパスはC3に入力する仕様です。
マクロはボタンに登録します。

C3にファイルパス(今回はExcelファイル)を入力してボタンをクリックすると、指定したExcelファイルが存在する場合は開き、存在しない場合はその旨のメッセージを表示します。

ソースコード

今回のソースコードはこんな感じです。

Sub File_check()
 
Dim FilePath As String
FilePath = Range("C2").Value
 
If Dir(FilePath) = "" Then
   MsgBox "指定されたファイルは存在しません。"
   Exit Sub
End If
 
Workbooks.Open (FilePath)
MsgBox "指定のファイルを開きました。"
 
End Sub


今回の肝となるのが、「Dir()」です。

これは()内で指定したファイルが存在する場合はファイル名を、存在しない場合は空文字を戻り値として返す関数です。

※Dir関数は、ワイルドカードが使ったり、ファイル属性を指定したりすることで複雑な処理をすることも可能な関数です。
 ↑今回はシンプルにファイルパスで検索をかけています。

◇使い方

実際に動かしてみます。

デスクトップに新しいフォルダを用意しました。

このフォルダ内にある「test.xlsx」を開きたい、という設定で進めます。

まずはフォルダ内が空のまま進めます。
C3にファイルパスを入力します。


ボタンをクリックすると・・・・

メッセージボックスが出てきました。
OKをクリックしてプロシージャを終了することで、実行時エラーを回避できます。

次は、フォルダ内に「test.xlsx」を配置して実行してみます。

この状態でボタンをクリックすると・・・・

test.xlsxが開きました!

狙い通り、ファイルの存在有無で処理を分岐することができました。

◇最後に

今回は、「別のExcelファイルを開く」というシンプルな処理を例に紹介しましたが、csvのインポートやデータのコピー等にも利用できます。

マクロを個人利用する場合は、ここまで気をつかう必要もないのですが、複数人で共有する場合は今回のような配慮が大切になってきます。

この記事も誰かの役に立つとうれしいです。