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の実用性が一気に上がります。
特に、毎回違うファイルを扱う業務では非常に便利なので、ぜひ活用してみてください。

コメント