【EXCEL VBA】ファイルをダイアログから選択する

この操作が必要になるのは、ファイル名が特定できないときです。
そこで、処理対象のファイルをユーザーに選択してもらいます。
専用のダイアログを表示するFileDialogオブジェクトを使います。

FileDialogオブジェクトの取得

FileDialogオブジェクトは、ApplicationオブジェクトのFileDialogプロパティに、ファイル選択の定数msoFileDialogFilePickerを指定して取得します。
こんな感じ。Application.FileDialog(msoFileDialogFilePicker)

FileDialogオブジェクトのプロパティ/メソッド

プロパティ/メソッド意味備考
InitialFileNameプロパティ初期表示フォルダ名フルパスで指定する。後ろに「\」を入れる
省略可:省略時の表示フォルダは¥C
AllowMultiSelectプロパティ複数選択設定の状態複数選択:可のときTrue、不可のときFalseを返す
省略可:省略すると複数選択不可
SelectionItemプロパティ選択したファイル/フォルダの情報選択した順番にSelectionItem(1), SelectionItem(2), SelectionItem(3),…
Showメソッドダイアログを表示する選択したらTrue, 選択せずに閉じる/キャンセルならFalseを返す

一つのファイルをダイアログから選択するマクロ

Sub ファイル選択()
	With Application.FileDialog(msoFileDialogFilePicker)
		.InitialFileName = ThisWorkbook.Path & "\"
		If .Show Then
       Dim FileName As String
			FileName = .SelectedItems(1)
									
			'指定されたFileをOpenする						
			Dim trgtBook As Workbook						
			Set trgtBook = Workbooks.Open(FileName)						
			    	'<処理>					
			trgtBook.Close						
		End If							
	End With
End Sub

複数のファイルをダイアログから選択するマクロ

Sub 複数ファイル選択()								
	Dim FileName() As String							
	Dim i As Long							
	With Application.FileDialog(msoFileDialogFilePicker)							
		.InitialFileName = ThisWorkbook.Path & "\"						
		.AllowMultiSelect = True						
		If .Show Then						
			Dim n As Long					
			n = .SelectedItems.Count					
			ReDim FileName(1 To n)				
			For i = 1 To n				
				FileName(i) = .SelectedItems(i)			
					                			
				'指定したFileをOpenする			
				Dim trgtBook As Workbook			
				Set trgtBook = Workbooks.Open(FileName(i))			
					     '<処理>		
				trgtBook.Close			
			Next i				
		End If						
	End With							
End Sub