VBA ダイアログボックス表示(FileDialog)

■ FileDialogとは?

Application.FileDialogは、VBAでダイアログボックスを作成・表示するためのオブジェクトです。種類ごとに機能が異なり、次の4つの定数を使って指定します。

種類定数説明
ファイルを開くmsoFileDialogFilePickerユーザーにファイルを選ばせる
フォルダを選択msoFileDialogFolderPickerフォルダ選択専用
ファイルを保存msoFileDialogSaveAsファイル保存先を指定
ファイルを開く(複数選択)msoFileDialogOpenファイル選択と似ている

■ 基本構文(FileDialogの共通書式)

Dim fd As FileDialog
Set fd = Application.FileDialog(種類)

With fd
.Title = "タイトルを入力"
.InitialFileName = "初期表示のパスやファイル名"
.AllowMultiSelect = True or False
If .Show = -1 Then 'OKが押されたか?
'処理を記述
Else
MsgBox "キャンセルされました"
End If
End With

■ ファイル選択ダイアログ(FilePicker)

Sub ファイルを選択する()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
.Title = "ファイルを選んでください"
.Filters.Clear
.Filters.Add "Excelファイル", "*.xlsx; *.xlsm"
.AllowMultiSelect = False

If .Show = -1 Then
MsgBox "選ばれたファイルは:" & .SelectedItems(1)
Else
MsgBox "キャンセルされました"
End If
End With
End Sub
  • .Filters:指定した拡張子だけを表示。
  • .SelectedItems(1):選ばれたファイルパス(複数選択可ならループで処理)。

■ フォルダ選択ダイアログ(FolderPicker)

Sub フォルダを選択する()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)

With fd
.Title = "保存先フォルダを選択してください"
.InitialFileName = "C:\Users\"

If .Show = -1 Then
MsgBox "選択されたフォルダ:" & .SelectedItems(1)
Else
MsgBox "キャンセルされました"
End If
End With
End Sub
  • .InitialFileNameで初期フォルダを指定可能。
  • フォルダのフルパスが .SelectedItems(1) に格納されます。

■ ファイル保存ダイアログ(SaveAs)

Sub ファイル保存先を選ぶ()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)

With fd
.Title = "保存ファイル名を入力してください"
.InitialFileName = "C:\Users\Public\Documents\sample.xlsx"

If .Show = -1 Then
MsgBox "保存先ファイル名:" & .SelectedItems(1)
Else
MsgBox "キャンセルされました"
End If
End With
End Sub
  • 実際に保存処理はしません。パスだけ取得されるので Workbook.SaveAs などと組み合わせて使います。

■ 複数ファイルの選択

Sub 複数ファイルを選択する()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
.Title = "複数のファイルを選んでください"
.AllowMultiSelect = True

If .Show = -1 Then
Dim i As Integer
For i = 1 To .SelectedItems.Count
Debug.Print "選択ファイル " & i & ":" & .SelectedItems(i)
Next i
Else
MsgBox "キャンセルされました"
End If
End With
End Sub

■ よくある応用例

1. CSVファイルだけ表示したい

.Filters.Add "CSVファイル", "*.csv"

2. 複数拡張子に対応したい

.Filters.Add "テキスト・CSV", "*.txt;*.csv"

3. デフォルト保存ファイル名を提示したい

.InitialFileName = "C:\作業フォルダ\結果ファイル.xlsx"

■ エラーハンドリング(安全対策)

ダイアログ操作はユーザー依存のため、キャンセル操作や誤選択に備えたエラーチェックが必要です。以下はその例です:

If fd.SelectedItems.Count = 0 Then
MsgBox "ファイルが選択されていません"
Exit Sub
End If

■ まとめ

FileDialog は、VBAでユーザーに操作を委ねたいときに極めて便利な機能です。GUIベースでファイルやフォルダを選ばせることで、柔軟かつ安全なプログラム設計が可能になります。

使用目的種類定数
ファイル選択ファイルを開くmsoFileDialogFilePicker
フォルダ選択保存先などの選択に便利msoFileDialogFolderPicker
ファイル保存先名前付き保存処理にmsoFileDialogSaveAs
複数ファイル処理ファイル一括処理にAllowMultiSelect = True
タイトルとURLをコピーしました