【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する


workbook

photo credit: candrews where do i find the time? via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAのシリーズとして請求書を作成するマクロの作り方をお伝えしています。

前回の記事はこちらです。

【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
初心者向けエクセルVBAのシリーズとして請求書を作成するマクロの作り方をお伝えしています。今回は、エクセルVBAで新たなブックを開く方法です。コレクションやWorkbooksプロパティについても解説しますよ。

Openメソッドを使ってブックを開く方法をお伝えしました。

その場合、引数としてフルパスを指定する必要がありますが、開くファイルが現在マクロを記述しているブックと同じフォルダにあるのであれば、ちょっと簡単に記述することができます。

ThisWorkbookプロパティとPathプロパティというのを使います。

ということで、今回はエクセルVBAで現在マクロを書いているブックのフォルダのパスを取得する方法についてお伝えします。

なお、こちらの記事は以下のYouTube動画と連動していますので、合わせてご覧くださいませ。

では、行ってみましょう!

今回のお題の確認

取引先ごとの請求書を作成したい

さて、今目指しているのは、以下のようなフローで取引先ごとの請求書を作成するプログラムです。

以下の動作を「取引先マスタ」シート(wsClient)にリストしている取引先の分だけ繰り返します。

  1. 「請求書ひな形.xlsx」をワークブックとして開く
  2. 該当の取引先の請求データを「請求書ひな形」に転記および各種情報を書き込む
  3. ブック名を「yyyymm請求書_取引先名.xlsx」として別名で保存

フルパスを指定せずにファイルを開きたい

前回の復習としては、以下のステートメントで「請求書ひな形.xlsx」を開けるということについてお伝えしました。

ただ、フルパスを調べるのはちょっと面倒ですし、このステートメントを使いまわすことはできませんよね。

今回は、この問題を解決していきます。

現在マクロを書いているブックを取得する

Openメソッドの引数は開くブックの「フルパス」ですね。

「請求書ひな形.xlsx」は、現在マクロを書いているファイルの同階層にありますから、「現在マクロを書いているブックと同じパス」というテクニックを使うことができます。

まず、現在マクロを書いているブックですが、これはApplicationオブジェクトのThisWorkbookプロパティで取得することができます。

Application.ThisWorkbook

Applicationオブジェクトは省略可能ですので、単純に

ThisWorkbook

でもOKです。

これで、「現在マクロを書いているブック」はWorkbookオブジェクトとして取得できますね。

ActiveWorkbookとの使い分け

ThisWorkbookになんとなく似ているプロパティとして、ActiveWorkbookプロパティというのがあります。

これはその名の通り、アクティブなワークブックを取得するプロパティです。

Applicationオブジェクトのメンバーなので、オブジェクトを省略して

ActiveWorkbook

とだけ記述することで、アクティブなブックを指定することができます。

ただ、これには以下の記事でお伝えしているActiveSheetと同様のリスクがあります。

【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
初心者向けエクセルVBAのシリーズとして請求データから請求書を作成するマクロの作り方をお伝えしています。 今回はWorksheetオブジェクトを変数にセットして取り扱う方法についてお伝えします。

つまり、マクロを実行中に、ユーザー操作によってアクティブなブックが変更されてしまうと、本来想定していないワークブックが処理の対象となってしまう可能性があるというリスクです。

一方で、ThisWorkbookはユーザーの操作に関係なく同一のブックを指し示しますので、こちらが使える場合はこちらが安全です。

また、ActiveWorkbookを使うのであれば、すぐさまオブジェクト変数にセットして使用するほうが良いでしょう。

ブックのパスを取得する

次に、Workbookオブジェクトのパスを取得する方法ですね。Pathプロパティを使います。

書き方はこちらです。

Workbookオブジェクト.Path

ですから、以下のようにイミディエイトウィンドウに入力すれば、現在マクロを記述しているブックのパスを取得することができます。

現在マクロを記述しているファイルのパスを取得する

まとめ

以上、エクセルVBAで現在マクロを書いているブックのフォルダパスを取得する方法についてお伝えしました。

ThisWorkbookプロパティPathプロパティも、非常に使いどころの多い便利なプロパティです。

是非マスターしていただければと思います。

次回は、ワークブックとそのシートをオブジェクト変数にセットする方法です

【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
初心者向けエクセルVBAのシリーズとして、請求書を作成するマクロの作り方をお伝えしています。今回は、エクセルVBAで開いたブックとそのワークシートを取得するには色々な方法がありますので、お伝えします。

どうぞお楽しみに!

連載目次:データ一覧から請求書を自動で作る

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
  3. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  4. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  5. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  6. 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
  7. 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
  8. 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
  9. 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
  10. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  11. 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
  12. 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
  13. 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
  14. 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
  15. 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
  16. 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
  17. 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
  18. 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
  19. 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
  20. 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
  21. 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
  22. 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る

The following two tabs change content below.
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ ★フォロー頂ければ嬉しいです。

コメント