【Excel VBA】「ファイルを開く」ダイアログを表示してパスを取得する方法 (GetOpenFilename)

マクロで外部のExcelファイルを読み込む際に、ファイルパスをコード内に直接書き込む(ハードコーディングする)のではなく、マクロ実行時にユーザー自身にファイルを選択させたい、という場面は非常に多くあります。

VBAの**Application.GetOpenFilenameメソッド**を使えば、お馴染みの「ファイルを開く」ダイアログボックスを簡単に表示し、ユーザーが選択したファイルのフルパスを文字列として取得できます。

この記事では、その基本的な使い方と、ファイルの種類を絞り込むための引数の設定方法などを解説します。


目次

完成したVBAコード

Sub ShowFileOpenDialog()

    ' 変数を宣言します。戻り値はパス(文字列)かFalse(ブール値)のため、Variant型にします。
    Dim selectedFilePath As Variant

    '--- 1. 「ファイルを開く」ダイアログボックスを表示 ---
    selectedFilePath = Application.GetOpenFilename( _
        Title:="処理対象のExcelブックを選択してください", _
        FileFilter:="Excel ブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm,すべてのファイル (*.*),*.*")
        
    '--- 2. 選択結果を判定 ---
    If selectedFilePath = False Then
        ' 「キャンセル」が押された場合
        MsgBox "ファイルの選択がキャンセルされました。"
    Else
        ' ファイルが選択された場合
        MsgBox "以下のファイルが選択されました。" & vbCrLf & selectedFilePath
        
        ' (応用) 実際にそのブックを開く処理
        ' Workbooks.Open selectedFilePath
    End If

End Sub

コードのポイント解説

Application.GetOpenFilename メソッド

このメソッドを実行すると、「ファイルを開く」ダイアログボックスが表示されます。重要なのは、このメソッドはファイルを実際に開くわけではなく、選択されたファイルのフルパスを文字列として返すだけ、という点です。ファイルを開くには、取得したパスを使って別途Workbooks.Openを実行する必要があります。

FileFilter 引数

ダイアログの右下にある「ファイルの種類」のドロップダウンリストを設定するための、非常に重要な引数です。

FileFilter:="表示名1,*.拡張子1,表示名2,*.拡張子2"

表示名拡張子のパターンをカンマ区切りでペアにして指定します。複数の拡張子をまとめたい場合は、セミコロン(;)で区切ります。

: "Excel ブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm"

  • Excel ブック (*.xlsx; *.xlsm): ドロップダウンに表示されるテキストです。
  • *.xlsx;*.xlsm: 対応する拡張子のパターンです。

③ キャンセルされた場合の処理

If selectedFilePath = False Then

ユーザーがダイアログでファイルを選択せずに「キャンセル」ボタンを押した場合、GetOpenFilenameメソッドは**ブール値のFalse**を返します。

そのため、戻り値を受け取る変数はVariant型で宣言しておき、If文でFalseかどうかを判定することで、キャンセル時の処理を正しく分岐させることができます。


【応用】選択したファイルを実際に開く

GetOpenFilenameで取得したファイルパスを、Workbooks.Openと組み合わせることで、「ユーザーが選んだファイルを開く」という一連の動作が完成します。

Sub SelectAndOpenFile()
    Dim bookPath As Variant
    
    bookPath = Application.GetOpenFilename(FileFilter:="Excel ブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm")
    
    If bookPath <> False Then
        Workbooks.Open bookPath
        MsgBox ActiveWorkbook.Name & " を開きました。"
    End If
End Sub

まとめ

Application.GetOpenFilenameメソッドは、ユーザーとの対話的なマクロを作成する上で不可欠な機能です。

  • **戻り値はファイルのフルパス(文字列)**であり、ファイル自体を開くわけではない。
  • FileFilter引数で、ユーザーがファイルを選びやすいように種類を絞り込む。
  • 戻り値を受け取る変数は**Variantにし、Falseかどうか**でキャンセルを判定する。

これらのポイントを押さえることで、より柔軟でユーザーフレンドリーなVBAツールを作成することができます。

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

この記事を書いた人

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

目次