Excel VBA

【Excel VBA】【マクロ】【Tips】ダイアログボックスからフォルダ、ファイルを指定する方法(備忘録)

こんにちは!Lenocoです。本日も見てくださりありがとうございます。

今回はフォルダ、ファイルの指定方法についてのTips回です!!!
※前回の「【Excel VBA】【マクロ】【Tips】図形をボタンにしたときに引数を渡す方法(備忘録)」の応用編も兼ねています

ダイアログボックスからフォルダ、ファイルを指定する方法

ユーザに、フォルダやファイルを指定してほしいことってありますよね。
処理対象のフォルダやファイルのパスをボタンからダイアログでぱぱっと指定してもらう方法をご紹介します!

コード

Sub Sample(typeName As String)
    '定数
    Const FOLDER_PATH_CELL As String = "B3"
    Const FILE_PATH_CELL As String = "B6"
    Const SHEET_NAME = "Sheet1"
    
    Select Case typeName
        Case 1

            'ダイアログボックスでフォルダを指定する
            With Application.FileDialog(msoFileDialogFolderPicker)
                .Title = "フォルダを選択してください。"
                If .Show = True Then
                    ThisWorkbook.Sheets(SHEET_NAME).Range(FOLDER_PATH_CELL) = .SelectedItems(1)
                End If
            End With
            
        Case 2
            'ダイアログボックスでファイルを指定する
            With Application.FileDialog(msoFileDialogFilePicker)
                .Filters.Clear
                .Filters.Add "Microsoft Excelブック", "*.xlsx"
                .Title = "ファイルを選択してください。"
                If .Show = True Then
                    ThisWorkbook.Sheets(SHEET_NAME).Range(FILE_PATH_CELL) = .SelectedItems(1)
                End If
            End With
            
        Case Else
            MsgBox "無効な値です。"
    End Select

End Sub

コード説明

'定数
Const FOLDER_PATH_CELL As String = "B3"
Const FILE_PATH_CELL As String = "B6"
Const SHEET_NAME = "Sheet1"

ここで定数を宣言しています。
パスを書きだすセルとシート名を選択しており、
コード内で直接指定でもいいのですが、セルが変更になったときやシート名が変更になったときに
コードの上部でのみ修正を行えば良いので定数で宣言しておいた方が楽なのでおすすめです。

参照①ボタンのマクロの登録で、以下のように指定し引数を渡しています。

'Sample "1"'

そのため、参照①ボタンを押したときは、Select caseの「Case 1」の処理に入ります。

        Case 1  ’参照①の処理
            'ダイアログボックスでフォルダを指定する
            With Application.FileDialog(msoFileDialogFolderPicker)
                .Title = "フォルダを選択してください。"
                If .Show = True Then
                    ThisWorkbook.Sheets("Sheet1").Range(FOLDER_PATH_CELL) = .SelectedItems(1)
                 End If
            End With

「Application.FileDialog」プロパティでダイアログボックスを開くことができます。
引数に「msoFileDialogFolderPicker」を指定することで、フォルダを選択することができるようになります。
「.Title」でダイアログボックスのタイトルを決めます。
「.Show」でダイアログボックスを表示し、フォルダが指定されて「OK」が押されたときに戻り値「-1」を返し、「キャンセル」が押されたときに戻り値「0」を返します。
「-1」を返したときにTrueと判断されるのでIf文に入ります。
選択されたフォルダのパスが、指定されたセル内に入ります。

参照②ボタンのマクロの登録で、以下のように指定し引数を渡しています。

'Sample "2"'

そのため、参照②ボタンを押したときは、Select caseの「Case 2」の処理に入ります。

        Case 2
            'ダイアログボックスでファイルを指定する
            With Application.FileDialog(msoFileDialogFilePicker)
                .Filters.Clear
                .Filters.Add "Microsoft Excelブック", "*.xlsx"
                .Title = "ファイルを選択してください。"
                If .Show = True Then
                    ThisWorkbook.Sheets(SHEET_NAME).Range(FILE_PATH_CELL) = .SelectedItems(1)
                End If
            End With

「Application.FileDialog」は先ほどと同じですが、引数が「msoFileDialogFilePicker」となっています。
このように指定するとファイルを選択することができるようになります。
選択するファイル(拡張子)を制限したい場合は、Filtersを設定します。
「.Filters.Clear」で一度クリアして、
「.Filters.Add」で拡張子を指定します。今回はExcelブック「.xlsx」のみ指定できるようにしています。
さらに拡張子を追加したい場合は「.Filters.Add」を次の行に追加して指定してください。
その他は先ほどと同様です。

さいごに

ユーザにパスをコピペしてもらうのもいいですが、
ダイアログボックスから指定できるとより使いやすくなるので是非参考にしてみてください!

Lenoco

COMMENT

メールアドレスが公開されることはありません。