エクセルVBAで、動きが似た者同士にSelectとActivateがあります。
実際には自然と使い分けをしているメソッドだと思います。
今回はその違いを最速に理解できるように説明をしていきます。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAで、そのコードを実行する先のオブジェクトに、フォーカスするためのメソッドに、「Select」と「Activate」があります。
今回は、このよく似た「Select」と「Activate」について説明します。
コンテンツ
VBA 似た者SelectとActivateの違いを最速に理解
エクセルVBAのコードを組み立てる中で「Select」と「Activate」は、よく使うコード(メソッド)です。
「どっちを使っても変わらないよ。」なんて話も聞きますし、
また、自分的には「Select」の方をよく使うかなとか思います。
「じゃ どっちでもいいってことで。」ではなくてしっかり違いもありますので、これから説明をいたします。
「Select」と「Activate」は実行結果に違いがある
実際にVBAコードを使って試してみます。
Selectを使う場合
Sub Selectテスト1()
Range("B3").Select
End Sub
実行結果
Activateを使う場合
Sub Activateテスト1()
Range("B3").Activate
End Sub
実行結果
ただ一つのものを選択する場合は「Select」も「Activate」も同じ結果になります。
Selectを使う場合
Sub Selectテスト2()
Range("B3:E9").Select
End Sub
実行結果
Activateを使う場合
Sub Activateテスト2()
Range("B3:E9").Activate
End Sub
実行結果
複数のセルを選択した場合も同じ結果になった!?ような気がします。
そこでもう少しコードを付け足したいと思います。
そのVBAプログラムが選択しているセルを見えるように”着色”してみます。
Selectを使う場合
Selectメソッドで選択した部分は「Selection」のオブジェクトとして操作できます。
Sub Selectテスト3()
Range("B3:E9").Select
Selection.Interior.ColorIndex = 36
End Sub
実行結果
Activateを使う場合
Activateメソッドで選択したセルは「Activecell」のオブジェクトとして操作できます。
Sub Activateテスト3()
Range("B3:E9").Activate
ActiveCell.Interior.ColorIndex = 36
End Sub
実行結果
「Select」で複数のセルを選択した場合、操作の対象は選択部分すべてに及びます。
「Activate」で複数のセルを選択した場合、操作の対象は選択範囲の最初のセルのみになります。1つのみです。
「Select」と「Activate」の使い分けにはルールがある
「Select」と「Activate」の使い分け
この様に、「Select」と「Activate」の性格の大きな違いは、
範囲を選択する「Select」と、キミだけを指名する「Activate」ということになります。
「では、これでOKですね!」と言えばそうでもありません。
VBAのルールの中でこっちのメソッドは使えないということがあります。
結論的には、このようになります。
メソッド | Cell、Range | Sheets、Worksheets | Workbooks |
---|---|---|---|
Select | 〇 | 〇 | ✖ |
Activate | 〇 | 〇 | 〇 |
ワークブックで「Select」が使えないのは、
エクセルの仕様として、複数のワークブックを同時にフォーカスを当てて選択することが出来ないことによるものです。
範囲を選択する時に使う。セルとシートの操作に使うことが出来る。
選択された部分は、「Selection」というオブジェクトで一まとめで扱うことが出来る。
例えば、シートやセルのコピーを行うときは、この「Selection」を使う場合も多いです。
Sub Selectテスト4()
Range("B3:E9").Select
Selection.Interior.ColorIndex = 36
Selection.Copy Destination:=Range("C11")
End Sub
実行結果
ただ一つのものを選択する時に使う。
ブックを指定する時はこのメソッドしか使えない。
選択したオブジェクトを操作する時は、「Activecell」「Activesheet」「Activebook」で操作できる。
例えば、VBAコード組み立てで「Activate」が必ず必要な場合があります。
エクセルBOOKを複数立ち上げて作業をしなければならない場合です。
ワークブックの「BOOK1」の「Sheet1」からその時バックグラウンドにあるワークブックの「BOOK2」の「Sheet2」へデータを移したいことがあります。
その時は、VBAコードとして
Workbooks("Book2").Activate
Worksheets("Sheet2").Select
と書くか
Workbooks("Book2").Worksheets("Sheet2").activate
と記述します。
この様に非表示下にあるBOOKを呼び出さなければならないときは、必ず「Activate」を使うことになります。
似た者SelectとActivateの違いのまとめ
この様にお互い似たものであっても、それぞれの個性がしっかりあるということをご理解いただけたと思います。
VBAコード作成を繰り返しているうちに、自然と使い分けが出来るようになってくると思います。
言われてみて「ああ、そうだった」というのもあるかもしれませんが、再確認したということかもしれません。
あと、「Activate」関連してVBAコードを組み立てる上で、
「Activecell」「Activesheet」「Activebook」の使い方でぜひ覚えておいて便利な使い方があります。
この内容については、
新規作成ブックとシート。アクティブ状態でやっておくことをご覧ください。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。