Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。cocoon ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /home/xs182025/consulting-campus.site/public_html/wp-includes/functions.php on line 6114
【VBA】現在のフォルダパス・ファイル名などのパス情報を取得する | CONSULTING CAMPUS

【VBA】現在のフォルダパス・ファイル名などのパス情報を取得する

現在のファイルパスを取得する VBA
この記事は約5分で読めます。
スポンサーリンク

本記事ではExcelのVBAを使用して、現在のブック・ファイルのパスを取得する方法をご紹介します。フォルダ名とファイル名を含む絶対フルパスや、ブック・ファイルが存在するフォルダパス、そして現在作業中のファイル名など、状況に応じて必要な情報を取得するためのコードをご紹介します。

  • 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のコードが実行されている現在のワークブック (ファイル) に関するパスの情報を出力します。

Excelでファイルパスなどのファイルのメタ情報を取得する際、ファイルが一度保存されていることを確認してください。

ファイル名を含むフルパスの取得

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を使用して現在のファイルのパスに関連する情報を取得する方法のご紹介となります。

ご質問やご不明点がある場合はお気軽にコメントお待ちしております。

ご精読いただきありがとうございました。

コメント

タイトルとURLをコピーしました