SelectとActivateの違い
結論からお伝えすると、この2つの違いは「範囲を選択状態にする」か「入力の準備をする」かにあります。
- Select(セレクト): セルやセル範囲を「選択」する操作です。マウスでドラッグして、範囲がグレーに反転している状態を指します。
- Activate(アクティベート): 選択された範囲の中で、特定の1セルを「入力待機状態」にすることです。範囲内で1箇所だけ白くなっているセルが「アクティブセル」です。
例えば、Range(“A1:C3”).Select を実行するとA1からC3までが選択されます。
続けて Range(“B2”).Activate を実行すると、選択範囲(A1:C3)は維持されたまま、B2セルが入力待機状態に切り替わります。
実務における「正解」の書き方
結論から言うと、実際の開発現場では SelectもActivateも極力使いません。
その理由は、コードを実行するたびに画面上でセルを選択する動きが入ると、処理速度が大幅に低下するからです。また、画面がチカチカと揺れるため、ユーザーの目も疲れさせてしまいます。
「マクロの記録」機能を使うと、必ずと言っていいほどSelectやActivateが含まれたコードが生成されます。
しかし、単にセルの値を書き換えるだけであれば、対象を直接指定して操作するのが最もスマートで高速な手法です。
コピペで確認!実践比較コード
1. 基本の書き方(挙動の違いを確認)
Sub CheckSelectActivate()
' A1からC3を選択する(範囲選択の状態)
Range("A1:C3").Select
' 選択範囲の中でB2を入力可能状態にする(アクティブ化)
Range("B2").Activate
' アクティブになったセル(B2)に文字を入力する
ActiveCell.Value = "ここに注目"
End Sub
2. 直接書き込む(選択しない=高速・安全)
Sub WriteDirectly()
' SelectもActivateも使わずに、直接値を書き込む
' この方法なら画面がチラつかず、処理も一瞬で完了します
Range("B2").Value = "ここに注目"
End Sub
最後に
学習を始めたばかりの頃は「まずは動くこと」が大切です。しかし、少しずつVBAに慣れてきたら、ぜひ 「2」の直接指定する書き方 を習慣にしてみてください。
これだけで、あなたの作るマクロの動作は劇的にスムーズになります。一つずつ、できることを増やしていきましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク


コメント