VBAでファイルパスを取得する
概要
VBAでファイルパスを取得して何らかの処理を行いたいときがあります。
GetOpenFileNameを利用することにより、任意のファイルのパスを取得することができます。
Application.GetOpenFilename メソッド (Excel)
C:\GetOpenFileNameTestに4つのファイルを置きました。

各ファイルのパスを取得して、Sheet1のB2セルからB5セルまで記入してみます。

ファイルのパスを取得するGetFilePath関数です。
1Option Explicit
2Function GetFilePath(Optional file_type As String = "") As String
3'###################################################################################
4'ファイル選択ダイアログを開き、選択したファイルの絶対パスをリターンする
5'-----------------------------------------------------------------------------------
6'引数 :ファイル選択ダイアログで選択できるファイルの種類
7' 引数を省略すると"すべてのファイル (*.*),*.*"
8' Excelの場合:"Microsoft Excelブック,*.xls?;*.xlsx;*.xlsm"
9' Accessの場合:"Accessファイル,*.accdb?;*.mdb"
10' CSV,TSVの場合:"CSV TSVファイル,*.csv?;*.tsv"
11'戻り値:選択したファイルの絶対パス
12'###################################################################################
13
14 Dim filePath As String
15
16 filePath = Application.GetOpenFilename(file_type)
17
18 If filePath <> "False" Then
19 GetFilePath = filePath
20 End If
21
22End Function</pre>
GetFilePathの引数に渡す文字列を変更することによって特定のファイル拡張子のみ ファイル選択画面に表示することができます。
GetFilePathを以下のコードでテストしてみます。
1Option Explicit
2Sub TestGetFilePath()
3
4 'ファイルパスを記載するシートオブジェクトを指定
5 Dim sht As Worksheet
6 Set sht = ThisWorkbook.Worksheets("Sheet1")
7
8 'B2セルに拡張子を指定しないでファイルパスを取得
9 sht.Range("B2") = GetFilePath()
10
11 'B3セルにExcelファイルの拡張子を指定してファイルパスを取得
12 sht.Range("B3") = GetFilePath("Microsoft Excelブック,*.xls?;*.xlsx;*.xlsm")
13
14 'B4セルにAccessファイルの拡張子を指定してファイルパスを取得
15 sht.Range("B4") = GetFilePath("Accessファイル,*.accdb?;*.mdb")
16
17 'B5セルにCSV・TSVファイルの拡張子を指定してファイルパスを取得
18 sht.Range("B5") = GetFilePath("CSV TSVファイル,*.csv?;*.tsv")
19
20 Set sht = Nothing
21
22End Sub
TestGetFilePathの拡張子を指定しないコードが実行されます。
すべてのファイル(*.*)と表示されますので、test.txtを選択してみます。
Excelファイルの拡張子を指定したコードが実行されます。
Excelファイルのみ選択画面に表示されるので、test.xlsxを選択します。
Accessファイルの拡張子を指定したコードが実行されます。
Accessファイルのみ選択画面に表示されるので、test.accdbを選択します。
CSV・TSVファイルの拡張子を指定したコードが実行されます。
CSV・TSVファイルのみ選択画面に表示されるので、test.csvを選択します。
各ファイルのパスを取得し、Sheet1のB2セルからB5セルに表示できました。