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セルに表示できました。

関連ページ