MENU

【初心者向け】VBAの「ThisWorkbook」と「ActiveWorkbook」の違いを解説

A子さん

ThisWorkbookActiveWorkbook の違いってなに?
どっちを使えば正しいの?
間違えると何が起きるの?

結論:ThisWorkbookは「マクロを含むブック」、ActiveWorkbookは「今アクティブなブック」

先輩

この2つの違いを正しく理解しておかないと、保存先を間違えたり、意図しないファイルを閉じてしまったりと、実務でのトラブルに繋がることもあります。

目次

それぞれの定義

ThisWorkbookとは?

「マクロが記録・保存されているブック」を指します。

ThisWorkbook.Save
先輩

上記のコードは「このマクロが入っているブックを保存する」命令です。

ActiveWorkbookとは?

ActiveWorkbookとは?

「今、アクティブ(選択中)のブック」を指します。

ActiveWorkbook.Save
先輩

これは「現在操作しているブックを保存する」命令になります。

例でわかる2つの違い

シナリオ

  1. BookA.xlsm(マクロが入っているブック)を開く
  2. マクロを実行して、BookB.xlsxを開く
  3. BookB.xlsxがアクティブな状態でマクロが続行

この時に次のコードを実行したらどうなる?

ThisWorkbook.Save
ActiveWorkbook.Save

ThisWorkbook.SaveBookAが保存される

ActiveWorkbook.SaveBookBが保存される

よくある間違いとその対策

❌ 間違い例

ActiveWorkbook.SaveAs "C:\temp\保存先.xlsx"
先輩

つもりは「このマクロが入ってるファイルを保存」だったのに、開いていた別ファイルを上書きしてしまう可能性があります。

✅ 対策

ThisWorkbook.SaveAs "C:\temp\保存先.xlsx"
先輩

明確に「このマクロファイル」と指定することで意図しない操作を防げます。

どちらを使えばよいかの判断基準

状況適切な指定理由
マクロ本体に対する操作ThisWorkbookマクロがどのブックにあるか明確だから
ユーザーが開いた他のブックに対する操作ActiveWorkbook実際にアクティブなファイルを対象にしたいから
確実な保存や閉じ処理を行いたいときThisWorkbook安全性が高く、意図を誤らない

実務での使用パターン

① マクロ本体の保存や閉じ処理

ThisWorkbook.Save
ThisWorkbook.Close SaveChanges:=True
先輩

マクロの設定ファイルや管理シートでよく使います。

② ユーザーが操作する任意のファイルを対象とする処理

ActiveWorkbook.Sheets("報告書").PrintOut
先輩

「開いたブックに処理をする」系のマクロで多用されます。

まとめ

ThisWorkbook = このマクロがあるブック(いつでも同じ)

ActiveWorkbook = ユーザーが現在アクティブにしているブック(変動する)

間違えると保存先や出力先がズレるため、意図を明確にして使い分けることが重要

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次