【ExcelVBA・マクロ】ダイアログボックスを開いてファイルを指定する方法|ファイル選択ダイアログの使い方【コピペOK】

ダイアログボックスを開いてファイルを指定する方法 ExcelVBA

ExcelVBAでファイルを扱うとき、次のようなことはありませんか?

  • 毎回ファイルパスを手入力するのが面倒
  • ユーザーにファイルを選ばせたい
  • CSVやExcelファイルを選択して読み込みたい

このような場合は、ファイル選択ダイアログを使うと便利です。
VBAからダイアログボックスを開いて、ユーザーに対象ファイルを選んでもらうことができます。

この記事では、ダイアログボックスを開いてファイルを指定するVBAコードを、初心者向けに分かりやすく解説します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • ファイル選択ダイアログを開ける
  • 選択したファイルのパスを取得できる
  • Excelファイルだけ選ばせることができる
  • 選んだファイルをそのまま開ける

基本:ファイル選択ダイアログを開くコード

まずは一番基本のコードです。
ファイルを選んで、そのパスをメッセージで表示します。

Option Explicit

Sub SelectFile_Basic()

    Dim filePath As Variant

    filePath = Application.GetOpenFilename

    If filePath <> False Then
        MsgBox "選択したファイル:" & vbCrLf & filePath, vbInformation
    Else
        MsgBox "キャンセルされました。", vbExclamation
    End If

End Sub

コードの意味を解説

GetOpenFilenameとは?

Application.GetOpenFilename は、ファイルを選択するダイアログボックスを表示する命令です。
ユーザーが選んだファイルのパスを取得できます。

戻り値が False になる場合

ユーザーがキャンセルした場合は、ファイルパスではなく False が返ります。
そのため、必ず次のような判定を入れるのが安全です。

If filePath <> False Then

Excelファイルだけ選ばせる方法

Excelファイルだけを選択対象にしたい場合は、ファイルの種類を指定できます。

Option Explicit

Sub SelectExcelFile()

    Dim filePath As Variant

    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファイル (*.xlsx; *.xlsm), *.xlsx; *.xlsm", _
        Title:="Excelファイルを選択してください")

    If filePath <> False Then
        MsgBox "選択したファイル:" & vbCrLf & filePath, vbInformation
    Else
        MsgBox "キャンセルされました。", vbExclamation
    End If

End Sub

このコードなら、Excelファイルだけを選択できるようになります。


CSVファイルを選ばせる方法

CSVだけを対象にしたい場合はこちらです。

Option Explicit

Sub SelectCSVFile()

    Dim filePath As Variant

    filePath = Application.GetOpenFilename( _
        FileFilter:="CSVファイル (*.csv), *.csv", _
        Title:="CSVファイルを選択してください")

    If filePath <> False Then
        MsgBox "選択したCSV:" & vbCrLf & filePath, vbInformation
    End If

End Sub

選んだファイルをそのまま開く方法

選択したファイルを、そのまま開きたい場合は次のように書きます。

Option Explicit

Sub SelectAndOpenFile()

    Dim filePath As Variant

    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファイル (*.xlsx; *.xlsm), *.xlsx; *.xlsm", _
        Title:="開くファイルを選択してください")

    If filePath <> False Then
        Workbooks.Open filePath
    Else
        MsgBox "キャンセルされました。", vbExclamation
    End If

End Sub

これで、ユーザーが選んだファイルを自動で開けます。


複数ファイルを選択する方法

複数ファイルをまとめて選ばせたい場合は、MultiSelect:=True を使います。

Option Explicit

Sub SelectMultipleFiles()

    Dim files As Variant
    Dim i As Long
    Dim msg As String

    files = Application.GetOpenFilename( _
        FileFilter:="Excelファイル (*.xlsx; *.xlsm), *.xlsx; *.xlsm", _
        Title:="複数ファイルを選択してください", _
        MultiSelect:=True)

    If IsArray(files) Then
        For i = LBound(files) To UBound(files)
            msg = msg & files(i) & vbCrLf
        Next i

        MsgBox "選択したファイル:" & vbCrLf & msg, vbInformation
    Else
        MsgBox "キャンセルされました。", vbExclamation
    End If

End Sub

複数選択の場合は、戻り値が配列になるのがポイントです。


実務でよく使うパターン

一番よく使うのは、ファイルを選ばせて、そのまま読み込むパターンです。

Option Explicit

Sub ImportSelectedFile()

    Dim filePath As Variant
    Dim wb As Workbook

    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファイル (*.xlsx; *.xlsm), *.xlsx; *.xlsm", _
        Title:="取り込むファイルを選択してください")

    If filePath = False Then
        MsgBox "ファイル選択がキャンセルされました。", vbExclamation
        Exit Sub
    End If

    Set wb = Workbooks.Open(filePath)

    MsgBox "ファイルを開きました:" & vbCrLf & wb.Name, vbInformation

End Sub

実務での活用例

  • 取り込み元ファイルを選ばせる
  • CSVを選択してインポートする
  • 比較対象のExcelファイルを指定する
  • 毎回変わるファイルを手動選択する

ファイルパスを固定せず、ユーザーに選ばせることで、より柔軟なマクロにできます。


よくあるエラーと対処法

① キャンセル時にエラーになる

キャンセルすると False が返るので、必ず判定してください。

If filePath = False Then Exit Sub

② ファイルが開けない

選んだファイルがExcelで開ける形式か確認してください。
CSVやPDFなどは、Workbooks.Open で開けない場合があります。

③ コードは正しいのにエラーになる

Webからコピーしたコードでは、全角記号や見えない特殊文字が混ざることがあります。
その場合は、エラーの出ている行を削除して手入力し直すと直ることがあります。


まとめ

  • ファイル選択ダイアログは Application.GetOpenFilename で開ける
  • 選択したファイルパスを取得できる
  • ファイル種類の指定や複数選択も可能
  • 実務では「選択 → 開く」の流れが特によく使う

ダイアログボックスを使ってファイルを指定できるようになると、VBAの実用性が一気に上がります。
特に、毎回違うファイルを扱う業務では非常に便利なので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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