【EXCEL VBA】フルパスをファイル名とパスに分けたい

フルパスをファイル名とパスに分ける方法を紹介します。InStrRev関数またはFileSystemObjectどちらかで簡単に分けることができます。

c:\parent\child\sample.txt


c:\parent\child
sample.txt

FileSystemObjectでは、ファイル名とパスだけでなく、拡張子やファイルサイズ、作成日時、更新日時、アクセス日時も取得することができます。サンプルプログラムにて確認してください。

InStrRev関数を使って解決する

EXCEL数式のみで解決しようとするとFINDやSUBSTITUTEなどを駆使して分ける方法がありますが、VBAではInStrRev関数で簡単に解決することができます。InStrRev関数は、文字列の後ろから指定の文字列を探す関数となります。

参考として、VBAを使わずにファイルとパスに分ける方法を紹介します。

FileSystemObjectを使って解決する

FileSystemObjectを利用するためには参照設定が必要になります。以下で設定方法を説明しています。

FileSystemObjectには、ファイル名やパス名を取得する関数が準備されています。関数をコールするだけで簡単に取得することができます。サンプルプログラムにて確認してください。

サンプルプログラムを確認する(コピペOK)

Option Explicit

Sub sample()

  Dim FullPath As String: FullPath = "c:\parent\child\sample.txt"
  
  ' InStrRevを使う方法
  Dim pos As Integer: pos = InStrRev(FullPath, "\")
    
  Debug.Print Left(FullPath, pos - 1)  ' c:\parent\child
  Debug.Print Mid(FullPath, pos + 1)   ' sample.txt
  
  
  ' FileSystemObjectを使う方法
  Dim fso As FileSystemObject: Set fso = New FileSystemObject
  
  Debug.Print fso.GetParentFolderName(FullPath) ' c:\parent\child
  Debug.Print fso.GetFileName(FullPath)         ' sample.txt
  Debug.Print fso.GetBaseName(FullPath)         ' sample
  Debug.Print fso.GetExtensionName(FullPath)    ' txt
  
  Debug.Print fso.GetFile(FullPath).Size             ' 43254
  Debug.Print fso.GetFile(FullPath).DateCreated      ' 2022/04/10 3:22:42
  Debug.Print fso.GetFile(FullPath).DateLastModified ' 2011/11/23 4:25:10
  Debug.Print fso.GetFile(FullPath).DateLastAccessed ' 2022/06/11 11:45:25

End Sub