忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBA】ThisWorkbook.Pathで簡単取得!開いているマクロブックのフォルダパスを活用する方法

VBAでファイル操作を行う際、フォルダの場所(パス)をコード内に直接書く(ハードコーディングする)と、ファイルを別の場所に移動したときにエラーになってしまいます。ThisWorkbook.Path を使えば、マクロが保存されているフォルダのパスを動的に取得できるため、環境が変わっても柔軟に動作するプログラムが作れます。

1. 基本概念:ThisWorkbook.Path とは?

ThisWorkbook.Path は、現在マクロが実行されているExcelファイル(自ブック)が保存されているフォルダの絶対パスを文字列で返します。

[ 特徴 ]
・マクロ付きブック(ThisWorkbook)が存在するフォルダのパスを取得する。
・末尾に「\(円マーク/バックスラッシュ)」は含まれない。
・ブックが一度も保存されていない未保存状態の場合は、空文字("")を返す。

2. 実践サンプル:自ブックのパスを取得して出力する

ポイント:末尾の「\」を連結してファイルパスを作る

自ブックと同じフォルダ内にある別のファイルやフォルダを指し示す場合、`ThisWorkbook.Path & "\"` とつなぐのが実務での基本テクニックです。

Sub ShowWorkbookPath()
  Dim currentPath As String
  
  ' 自ブックのフォルダパスを取得
  currentPath = ThisWorkbook.Path
  
  ' 1. パスそのものを出力
  Debug.Print currentPath
  
  ' 2. 同じフォルダ内のファイルを指すフルパスの例
  Debug.Print currentPath & "\データ.xlsx"
End Sub

3. 実行結果

イミディエイトウィンドウには、マクロが保存されているフォルダの位置に応じて以下のように表示されます。

C:\Users\Username\Documents
C:\Users\Username\Documents\データ.xlsx

4. エンジニアの視点:相対パス感覚で書けるメリットと注意点

1. ポータビリティの向上: `ThisWorkbook.Path` を基準に処理を組むと、フォルダごとデスクトップや共有サーバー、他人のPCへ移動させてもそのまま動きます。これぞまさに「自走するツール」の極意です。
2. ActiveWorkbook.Path との違い: `ActiveWorkbook` は「今画面でアクティブになっているブック」を指すため、処理中に別のブックを開くと取得先が変わってしまう危険があります。マクロ自身がある場所を基準にするなら、必ず `ThisWorkbook` を使いましょう。
3. 保存状態の事前チェック: 新規作成したばかりの未保存ブックで実行すると空文字が返り、後続のファイル参照でエラーになります。実務では `If ThisWorkbook.Path = "" Then` で保存済みか確認するガード句を入れておくと「いけいけ」で堅牢なコードになります。


5. まとめ

ファイルパスの動的取得は、脱ハードコーディングの基本中の基本です。`ThisWorkbook.Path` を使いこなして、環境の変化やファイルの移動にもびくともしないスマートなVBAツールを作成していきましょう!


PR