■ 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 |