0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VBA_FileDialog_ファイル選択と値出力

Last updated at Posted at 2023-09-21

やること

今回はファイルダイアログを表示して、選択したファイルのフォルダパスとファイル名をセルに出力します。
ファイルが1件の場合、複数件の場合、出力方法ごとに書いていきます。

イメージ

ボタン「選択」にマクロを割り当てています。
image.png

手順

・ボタン「選択」押下(手動)
・ダイアログを表示
・ファイルを選択し、ボタン「開く」押下(手動)
・セルに値をセット

使うもの

Application.FileDialog(msoFileDialogFilePicker)
ApplicationオブジェクトのFileDialogプロパティのmsoFileDialogFilePickerを指定します。
FileDialogプロパティはファイルダイアログを表示するものです。
これを使用することでファイルの選択や保存ができます。

定数 説明
msoFileDialogFolderPicker    フォルダを選択   
msoFileDialogFilePicker ファイルを選択
msoFileDialogOpen ファイルを開く
msoFileDialogSaveAs ファイルを保存

ダイアログのプロパティ、メソッド指定

ダイアログのタイトルを設定

Title:ダイアログのタイトルを設定できる。何のダイアログなのかユーザーが分かるものを設定。

Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"

image.png

選択できるファイル形式の指定

Filters:特定のファイル形式を指定することで、ユーザーが選択できるファイルを制限できる。

Application.FileDialog(msoFileDialogFilePicker).Filters.Add "すべてのファイル", "*.*"

image.png

ファイルの複数選択可否

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

出力結果:
image.png

ファイル複数件、対応セルに出力

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

出力結果:
image.png

おわりに

このダイアログを表示する処理は、配置場所を考慮し設置することで、開発者以外のユーザーが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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?