メインコンテンツへスキップ
VBAでファイルパスを取得する

VBAでファイルパスを取得する

··3 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。

VBAでファイルパスを取得して何らかの処理を行いたいときがありますがGetOpenFileNameを利用することにより、 任意のファイルのパスを取得することができます。

C:\GetOpenFileNameTestに4つのファイルを置きました。

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

ファイルのパスを取得するGetFilePath関数です。

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</pre>

GetFilePathの引数に渡す文字列を変更することによって特定のファイル拡張子のみ ファイル選択画面に表示することができます。

GetFilePathを以下のコードでテストしてみます。

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

関連記事

【VBA】最終行と最終列を取得する
··3 分
Programming VBA
VBAでOption Explicitを書くべきか?
·2 分
Programming VBA
VBA エディターのおすすめ設定
·3 分
Programming VBA