【VBA初心者向け】「ファイルが見つかりません」を回避!でファイル・フォルダの存在確認を使いこなす方法

【業務効率化】VBA
スポンサーリンク

「あれ、ファイルがない…」でマクロを止めないために

「プログラムを実行したのに、ファイルがなくてエラーで止まった。また最初からやり直しだ……」

こんな苦い経験に身に覚えはありませんか?

VBAで外部のファイルを操作するとき、最も重要なのは「対象のファイルが実際に存在するかどうか」を事前に確認することです。このような事前確認の手続きを、「バリデーション(妥当性確認)」と呼びます。

そこで役立つのが、パソコン内のファイルやフォルダを効率的に管理できる「FSO(FileSystemObject)」という機能になります。

【業務効率化】VBAの記事を見る 

そもそもFSO(FileSystemObject)とは?

FSOは、Windowsのファイルやフォルダを自由自在に操るための便利な機能です。

Excel標準の機能(Dir関数など)でも確認はできますが、FSOの方が「フォルダの有無」や「ファイルの詳細」を扱うのが得意で、コードが読みやすくなるというメリットがあります。

【実践】ファイルとフォルダの存在を確認するVBAコード

それでは、コピペして活用できる具体的なコードをご紹介します。
今回は「ファイルの存在確認」と「フォルダの存在確認」の2つのパターンを用意いたしました。

Sub CheckFileAndFolder()
    ' 1. FSOを呼び出す準備
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    Dim targetFile As String
    Dim targetFolder As String
   
    ' 確認したいパスを指定(ここを自分の環境に合わせて変えてください)
    targetFile = "C:\Users\Public\Documents\SalesData.xlsx"
    targetFolder = "C:\Users\Public\Documents\Report"

    ' --- ファイルの存在確認 ---
    ' fso.FileExists(パス) で、あれば True、なければ False が返る
    If fso.FileExists(targetFile) Then
        MsgBox "ファイルが見つかりました!処理を続行します。", vbInformation
    Else
        MsgBox "【エラー】ファイルがありません!パスを確認してください。", vbExclamation
        Exit Sub ' ファイルがないのでここで終了
    End If

    ' --- フォルダの存在確認 ---
    ' fso.FolderExists(パス) で判定
    If fso.FolderExists(targetFolder) Then
        MsgBox "保存先フォルダもバッチリあります。", vbInformation
    Else
        MsgBox "フォルダがなかったので、新しく作るなどの処置が必要です。", vbCritical
    End If
   
    ' 2. 使い終わったら片付ける
    Set fso = Nothing
End Sub

なぜこの一工夫が必要なのか?

わざわざ確認コードを入れなくても、ファイル名さえ合っていれば問題なく動くのでは?」と思われるかもしれません。

しかし、実際の現場では以下のようなトラブルが日常茶飯事に起こります。

  • ネットワーク上の共有フォルダのパスが、知らない間に変更されていた
  • 前工程の担当者が、ファイル名を「202603_売上.xlsx」から「202603_売上(修正).xlsx」に変えてしまった

この確認コードをあらかじめ入れておくだけで、エラー画面を前に立ち尽くすような「無駄な時間」をゼロにすることができます。

まとめ:エラーに強いスマートなVBAを書こう

VBAを書けるようになるだけでもすごいことですが、「エラーが起きる可能性を先回りして潰して回避する」設計ができるようになると、さらなるステップアップに繋がります。

まずは、今作っているマクロにfso.FileExists を追加してみてください!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました