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