先日SelectメソッドとActivateメソッドについて解説しました。
【Excel VBA】指定したセルやワークシート・ブックをアクティブにするActivateメソッド | Excelを制する者は人生を制す ~No Excel No Life~
【Excel VBA】指定したセル範囲やワークシートを選択するSelectメソッド | Excelを制する者は人生を制す ~No Excel No Life~
この2つのメソッドはある種同じ感覚で使えてしまうため混同しやすいですが、概念が当然に異なります。
今回はSelectメソッドとActivateメソッドの違いについて解説していきます。
そもそもアクティブと選択範囲の違い
アクティブと選択範囲の違いを認識しておくことがはじめの一歩です。
下図をご覧になるとイメージしやすいと思います。
現在編集できるものがアクティブセルとなります。(図の例ではB2セル)
選択範囲(B2:D5)はセルが反転していて、アクティブセルの箇所は白抜きになっています。
アクティブはあくまでも「現在」操作対象のもの。
セルでいえば、名前ボックスに表示されているもの(文字が実際に入力できるもの)、シート・ブックはいわずもがな現在開いているものになります。
選択はアクティブなものも含まれますが、それ以外のオブジェクトも選択範囲となっている場合もあるわけです。
続いて、それぞれのメソッドの特色(使いどころ)を箇条書きにしておきます。
Selectメソッドの特色
- 複数のオブジェクト(セル・シート)を選択できる
- 後で選択範囲を「Selection」のオブジェクトとして操作できる
Activeteメソッドの特色
- 現在操作したいオブジェクトに切り替えることができる
- Selectメソッドで複数範囲を選択した際に実際に処理したい単一オブジェクトをさらに指定できる
- Workbookオブジェクトを指定したい場合はActivateメソッドしか使用できない
- 非表示のWorksheetオブジェクトを指定できる
非表示のセルはSelectメソッドでもActivateでも指定可能です。
参考サイト
Office TANAKA – Excel VBA Tips[アクティブでないシートのアクティブセル]
Excelでワークシートを選択する場合にSelectではなくActivateを使った方がよい理由 – paz3のおもいつき
まとめ
正直、操作したい対象が単一のオブジェクトであればブック以外はどちらのメソッドでも構わないでしょうが、複数のオブジェクト操作をしたい場合、あるいは後で制御したい場合はけっこうあるので、基本的にはSelectメソッドを使っておいた方がエラーになることは少ないかと思います。
そして、ブックや非表示のシート、複数範囲の編集セルの指定など、特定の状況の際にActivateメソッドを使う、といったスタンスの方が混乱は少なく済みます。
あとは実際のコーディングの際に適宜エラーとなった都度どちらが良いか調べる、これに尽きます(・∀・)
結局この手のコーディングは動かしながらエラーが出た都度対処して経験値を積み上げていくしかないというのが現実です。