本記事ではExcelのVBAを使用して、現在のブック・ファイルのパスを取得する方法をご紹介します。フォルダ名とファイル名を含む絶対フルパスや、ブック・ファイルが存在するフォルダパス、そして現在作業中のファイル名など、状況に応じて必要な情報を取得するためのコードをご紹介します。
- VBAで現在のファイルパスを取得したい
- VBAでブック名を出力したい
結論: VBAで現在のパスやフォルダパス、ファイル名を取得する方法
ExcelのVBAを使用して、現在のブック・ファイルのパスを取得する方法は下記のとおりです。
- ファイル名を含むフルパスの取得
Sub DebugFilePath() Debug.Print ThisWorkbook.FullName End Sub ' C:\Users\User\Documents\ファイルパスの取得.xlsm
- 現在のファイルが存在するフォルダパスの取得
Sub DebugFilePath() Debug.Print ThisWorkbook.Path End Sub ' C:\Users\User\Documents
- 現在のファイル名・ブック名の取得
Sub DebugFilePath() Debug.Print ThisWorkbook.Name End Sub ' ファイルパスの取得.xlsm
また、VBAを使用せずに、通常の数式でファイルパスに関する情報を扱いたい場合はこちらのセクションをご確認ください。
前提: ファイルパスやファイル名を取得したいブックの確認
まずはじめに、今回パスを取得したいファイル・ブックが実行するVBAとどのような関係にあるか確認してください。今回はThisWorkbookを使用していますが、状況によってはActiveWorkbookを使用した方が良い場合があります。
既にこの2つの違いを理解している方は次のセクションまで読み飛ばしてください。こちらで少し解説します。
ActiveWorkbookとThisWorkbookの違い
- ActiveWorkbook: 現在Excelでアクティブになっているワークブックを指します。ユーザが最後にクリックしたり、作業したりしているワークブックです。複数のワークブックが開かれている場合、アクティブなワークブックはユーザの操作によって変わります
- ThisWorkbook: マクロが含まれているそのワークブックを指します。例えば、あるワークブックにマクロが記載されており、そのマクロを実行すると、
ThisWorkbook
は常にそのマクロが含まれるワークブックを指します、たとえユーザが他のワークブックをアクティブにしていたとしても常にコードが存在するブックの情報が返されます
VBAで現在のパスを取得・操作する方法の紹介
今回は先に紹介した通り、ThisWorkbookを使用して、VBAのコードが実行されている現在のワークブック (ファイル) に関するパスの情報を出力します。
ファイル名を含むフルパスの取得
Workbook.FullName
は、現在作業中のブックのパスとファイル名を含むフルパスを出力します。この出力は文字列で返されるため、通常のテキストと同じようにメッセージボックスやセルなどに出力できます。
Sub DebugFilePath()
Debug.Print ThisWorkbook.FullName
End Sub
' C:\Users\User\Documents\ファイルパスの取得.xlsm
参考: Workbook.FullName プロパティ (Excel)
現在のファイルが存在するフォルダパスの取得
Workbook.Path
は、現在作業中のブックが存在するフォルダのパスを出力します。フルパスと同様に文字列で値が返されます。
Sub DebugFilePath()
Debug.Print ThisWorkbook.Path
End Sub
' C:\Users\User\Documents
ここで、取得したフォルダパスを使用して同じファルダ内のsample.pptx
を開きたい場合、下記のように\
でパスを繋いで実装します。
Sub OpenPPT()
Path = ThisWorkbook.Path
Set App = CreateObject("PowerPoint.Application")
App.Presentations.Open (Path & "\sample.pptx")
End Sub
参考: Workbook.Path プロパティ (Excel)
現在のファイル名・ブック名の取得
最後に、現在のファイル名のみを取得したい場合は、同様に.Name
プロパティを指定します。ここでも文字列が取得できています。
Sub DebugFilePath()
Debug.Print ThisWorkbook.Name
End Sub
' ファイルパスの取得.xlsm
参考: Workbook.Name プロパティ (Excel)
参考: VBAなしで、セルにファイル名やフォルダパスを取得する方法
ここまで、VBAを使用して現在のパスやファイル名を取得する方法をご紹介しましたが、実はこれらの機能は通常の数式だけでも実装することができます。参考までに数式のみでの実装例をご紹介していますので、より詳しく知りたい方は【エクセル】ファイル名を自動で取得しセルに表示する【マクロ不要】をご確認ください。
- ファイル名を含むフルパスの取得
=SUBSTITUTE(TEXTBEFORE(CELL("filename"), "]"), "[", "")
- 現在のファイルが存在するフォルダパスの取得
=TEXTBEFORE(CELL("filename"), "\", -1)
- 現在のファイル名・ブック名の取得
=TEXTAFTER(TEXTBEFORE(CELL("filename"), "]"), "[")
おわりに
以上が、ExcelのVBAを使用して現在のファイルのパスに関連する情報を取得する方法のご紹介となります。
ご質問やご不明点がある場合はお気軽にコメントお待ちしております。
ご精読いただきありがとうございました。
コメント