やること
今回はファイルダイアログを表示して、選択したファイルのフォルダパスとファイル名をセルに出力します。
ファイルが1件の場合、複数件の場合、出力方法ごとに書いていきます。
イメージ
手順
・ボタン「選択」押下(手動)
・ダイアログを表示
・ファイルを選択し、ボタン「開く」押下(手動)
・セルに値をセット
使うもの
Application.FileDialog(msoFileDialogFilePicker)
ApplicationオブジェクトのFileDialogプロパティのmsoFileDialogFilePickerを指定します。
FileDialogプロパティはファイルダイアログを表示するものです。
これを使用することでファイルの選択や保存ができます。
定数 | 説明 |
---|---|
msoFileDialogFolderPicker | フォルダを選択 |
msoFileDialogFilePicker | ファイルを選択 |
msoFileDialogOpen | ファイルを開く |
msoFileDialogSaveAs | ファイルを保存 |
ダイアログのプロパティ、メソッド指定
ダイアログのタイトルを設定
Title:ダイアログのタイトルを設定できる。何のダイアログなのかユーザーが分かるものを設定。
Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"
選択できるファイル形式の指定
Filters:特定のファイル形式を指定することで、ユーザーが選択できるファイルを制限できる。
Application.FileDialog(msoFileDialogFilePicker).Filters.Add "すべてのファイル", "*.*"
ファイルの複数選択可否
AllowMultiSelect:複数のファイルを選択できるかどうかを指定できる。True に設定すると、複数のファイルを選択可能。(デフォルトはFalse)
Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
ダイアログ表示
Show:ダイアログボックスを表示するメソッド。返す値は下記の通り。
・-1:ダイアログ上のボタン「OK(開く)」が押された場合。(vbok)
・ 0:ダイアログ上のボタン「キャンセル」が押された場合。(vbCancel)
選択されたファイルのパス取得
SelectedItems:取り出し方は下記の通り。
Dim fullpath As String
fullpath = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
サンプル
ファイル1件のみ、指定セル有り
Sub SelectFile()
Dim strFilePath As String
Dim strFolderPath As String
Dim strFileName As String
'ファイル選択ダイアログを表示
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択してください"
.Filters.Clear
.Filters.Add "すべてのファイル", "*.*"
.AllowMultiSelect = False 'ファイル複数選択不可
'ファイルが選択された場合
If .Show = -1 Then
strFilePath = .SelectedItems(1)
strFolderPath = Left(strFilePath, InStrRev(strFilePath, "\") - 1) 'フォルダパスを取得
strFileName = Mid(strFilePath, InStrRev(strFilePath, "\") + 1) 'ファイル名を取得
' フォルダパス出力
ThisWorkbook.Sheets("Sample1").Range("B2").Value = strFolderPath
' ファイル名出力
ThisWorkbook.Sheets("Sample1").Range("B3").Value = strFileName
End
End With
End Sub
ファイル複数件、対応セルに出力
Sub SelectMultiFile()
Dim strFilePath As String
Dim strFolderPath As String
Dim strFileName As String
Dim intCnt As Integer
'ファイル選択ダイアログを表示
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択してください"
.Filters.Clear
.Filters.Add "すべてのファイル", "*.*"
.AllowMultiSelect = True 'ファイル複数選択可
'ファイルが選択された場合
If .Show = -1 Then
'値出力
For intCnt = 1 To .selectedItems.Count
strFilePath = .selectedItems.Item(intCnt)
strFolderPath = Left(strFilePath, InStrRev(strFilePath, "\") - 1) 'フォルダパスを取得
strFileName = Mid(strFilePath, InStrRev(strFilePath, "\") + 1) 'ファイル名を取得
' フォルダパス出力
ThisWorkbook.Sheets("Sample2").Cells(intCnt + 1, 1).Value = strFolderPath
' ファイル名出力
ThisWorkbook.Sheets("Sample2").Cells(intCnt + 1, 2).Value = strFileName
Next intCnt
End If
End With
End Sub
おわりに
このダイアログを表示する処理は、配置場所を考慮し設置することで、開発者以外のユーザーがExcelマクロファイルを使用する場合でも、視覚的に使用方法が分かりやすくなるのではないかと思います。
参考:
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application(object)
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.filedialog
エンジニアファーストの会社 株式会社CRE-CO S.K