【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が開きました!
狙い通り、ファイルの存在有無で処理を分岐することができました。