エクセルVBAでブックのアクティブ化はActivateメソッドを使います。
簡単なことですが、怠ると大変な結果を招くこともあります。
ミス例と記述方法を紹介します。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルブックをアクティブにするには「Activateメソッド」を使用します。
VBAコードでブック、シート、セルを操作・編集するためには、前提として操作する対象がアクティブになっている必要があります。
ブックをアクティブにすることは、VBAコード処理の前提条件ともなりますので、しっかり押さえておく必要があります。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
ブックをアクティブにしなければ・・・
一例として次のような状況を考えてみます。
エクセルブック「Book1.xlsm」のModule1に次のマクロを設置します。
エクセルブック「Book1.xlsm」をクリックで開いて、そのModule1にVBAコードを書き出しているのですから、当然、操作される主体は「Book1.xlsm」であると ” 思い込んで ” しまうかもしれません。
Sub ブックをアクティブ1()
Worksheets("Sheet1").Range("B3").Copy _
Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("D5")
End Sub
Book1.xlsmの「Sheet1」の「セルB3」に「あいうえお」、Book2.xlsmの「Sheet1」の「セルB3」に「アイウエオ」と入力しておきます。
マクロを実行した期待値としては、” エクセルブック「Book2.xlsm」の「Sheet1」の「セルD5」に「あいうえお」が入力される。” ことです。
マクロを実行すると、
結果として「アイウエオ」が入力されてしまいました。
VBAコードの書き出しの「Worksheets(“Sheet1”).Range(“B3”)」は、「” アクティブブック ” のSheet1のセルB3」という意味です。
原因としては、マクロ実行前に「Book2.xlsm」の「セルB3」に「アイウエオ」と、セル入力したために、アクティブブックが変更され、コピー元の「Sheet1」を「Book1.xlsm」でなく「Book2.xlsm」の方で参照されたため、ということです。
なので、正しく修正したVBAコードは、Workbooks(“Book1.xlsm”).Activate を追加記述します。
Sub ブックをアクティブ2()
Workbooks("Book1.xlsm").Activate
Worksheets("Sheet1").Range("B3").Copy _
Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("D5")
End Sub
また、VBAコードの他の記述方法として、
Sub ブックをアクティブ3()
Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B3").Copy _
Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("D5")
End Sub
でもOKです。
アクティブな状態は常に移り気なので、シートやセルを指定するときは「何処の何方さんのブック」かをいつも表現できているようにしましょう。
たくさんコードを書いていて、書き疲れで”やらかしてしまう”凡ミスのあるあるです。
ブックのActivateの記述方法
ブックをアクティブにする記述法はこのようになります。
ブックオブジェクト.Activate
記述法を一覧にすると・・・
Workbooks(“Book1.xlsm”).Activate | ブック名を指定してアクティブ化(拡張子を付けるのを忘れないで!) |
Workbooks(1).Activate | インデックス番号を指定してアクティブ化します。 |
MyWb.Activate | オブジェクト変数を使ってアクティブ化(Setステートメントで変数化”MyWb”) |
Workbooks(“Book1”).Activate | 例外で、新規作成したブックを名前を付けて保存前にアクティブ化する場合 |
ActiveWorkbook | 現在アクティブ化しているブックを指定する場合に使います。 |
ThisWorkbook.Activate | マクロ(VBAコード)を実行しているブックをアクティブ化する。 |
まとめ
ブックのアクティブ化が正確にされていないと、記述したVBAコードも意図通りに動いてくれません。
そうなれば、間違ったデータを取り出してきて思わぬ実行結果になることもしばしばです。
あるいはまた、Activateメソッドを利用しなくても、
「Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”)」あるいは「With Workbooks(“Book1.xlsm”)~End With」などの表現方法でVBAコードを記述することも可能です。
With~End Withの使い方。VBAコードを簡潔に記述する更に、Activateとよく似たSelectの使い方も関連知識として続けて知っておくこともおすすめします。
VBA 似た者SelectとActivateの違いを理解 新規作成ブックとシート。アクティブ状態でやっておくことエクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。