【Excel VBA】「ファイルを開く」ダイアログでブックを直接開く方法 (FindFile)

マクロの実行中に、ユーザーに任意のブックを選択させ、そのブックを直接開きたい場合があります。VBAには、この「ダイアログの表示」と「ファイルを開く」という2つの動作を、一度に実行してくれるシンプルなメソッドがあります。

それがApplication.FindFileメソッドです。しかし、このメソッドは古いバージョンのExcelで使われていたもので、現在では非推奨とされています。

この記事では、Application.FindFileの基本的な使い方と、なぜ現在では利用が推奨されないのか、そして今使うべき代替方法を合わせて解説します。


目次

Application.FindFile の基本的な使い方

Application.FindFileは、引数なしで実行すると「ファイルを開く」ダイアログボックスを表示します。ユーザーがファイルを選択して「開く」をクリックすると、そのファイルが実際に開かれ、メソッドはTrueを返します。

完成したVBAコード

Sub OpenBookWithFindFile()

    ' Application.FindFileを実行
    ' ユーザーがファイルを選択して開くと、Trueが返る
    If Application.FindFile = True Then
        ' ファイルが正常に開かれた後の処理
        MsgBox "新しいブック「" & ActiveWorkbook.Name & "」を開きました。"
    Else
        ' 「キャンセル」が押された場合
        MsgBox "ファイルの選択がキャンセルされました。"
    End If

End Sub

このように、コードは非常にシンプルです。前回の記事で紹介したGetOpenFilenameと異なり、ファイルを開くためのWorkbooks.Openを別途記述する必要がありません。


【重要】Application.FindFile は古い、非推奨の機能です

このメソッドは非常にシンプルで便利に見えますが、Microsoftによって公式に「古い(Deprecated)」機能と位置付けられています。

  • 動作の保証がない: 最近のExcelバージョンでは、この機能が削除されていたり、意図通りに動作しなかったりする可能性があります。
  • 互換性の問題: 将来のExcelのアップデートで、完全に使えなくなる可能性があります。

このような理由から、新しくVBAコードを作成する際に、このApplication.FindFileメソッドを利用することは強く推奨されません。


【推奨】現代的な代替方法: GetOpenFilename を使う

現在、ユーザーにファイルを選択させて開く処理を実装する最も標準的で確実な方法は、前回の記事でも紹介した**GetOpenFilenameWorkbooks.Openを組み合わせる**方法です。

Sub OpenBook_RecommendedWay()
    
    Dim filePath As Variant
    
    ' 1. まず、GetOpenFilenameで「ファイルパス」だけを取得
    filePath = Application.GetOpenFilename(FileFilter:="Excel ブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm")

    ' 2. キャンセルされなかった場合、取得したパスを使ってブックを開く
    If filePath <> False Then
        Workbooks.Open Filename:=filePath
        MsgBox "「" & ActiveWorkbook.Name & "」を開きました。"
    Else
        MsgBox "ファイルの選択がキャンセルされました。"
    End If
    
End Sub

なぜこちらの方法が良いのか?

  • 信頼性と互換性: すべてのExcelバージョンで確実に動作し、今後もサポートされる標準的な方法です。
  • 柔軟性: ファイルを開く前に、取得したファイルパス(filePath)を使って、ファイル名のチェックやログの記録など、追加の処理を挟むことができます。

まとめ

メソッド特徴信頼性推奨度
Application.FindFile1行で「選択とオープン」ができてシンプル。低い(古い機能で非推奨)。
GetOpenFilename「パスの取得」と「開く」を2段階で行う。高い(標準機能)。

Application.FindFileは、古いコードをメンテナンスする際に目にすることがあるかもしれませんが、これから新しくマクロを作成する場合は、その存在は忘れて、必ずApplication.GetOpenFilenameWorkbooks.Openを組み合わせる方法を使いましょう。

これが、将来にわたって安定して動作する、プロフェッショナルなVBAコードの書き方です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次