Excel VBAでセル操作を行っていると、特定のセルや範囲を選択した後に、その選択状態を解除したくなる場面があります。
例えば、マクロの処理結果を見せるだけで後続の操作は別セルで行いたい場合や、選択範囲が残っていることでユーザーが誤って編集してしまうのを防ぎたい場合です。
Excelには「選択解除」という名前の直接的なメソッドはありませんが、別のセルに移動する・画面位置を変える・コピーやカットモードを解除するなど、実質的に選択を解除できる方法はいくつも存在します。
本記事では、そうした選択解除の代表的なテクニックと、実務での活用例・注意点を交えて解説します。これらを活用すれば、マクロの使い勝手や見た目を改善し、作業効率をさらに高められるでしょう。
目次
✅ Excel VBAでセルの選択を解除する方法
Excelを操作していると、「特定の範囲を選択した後、その選択を解除したい」という場面がよくあります。
例えば、マクロ実行後に選択範囲が残ってしまうと、次の操作で誤って上書きしてしまうリスクがありますし、見た目にも作業が終わっていないように感じられます。
VBAでは直接「選択を解除する」メソッドは存在しませんが、「別のセルに移動する」「シート全体を選択する」「コピー・カットモードを解除する」などの方法を組み合わせることで、実質的に選択を解除できます。
以下で代表的な方法を順に解説します。
・ ActiveCellを移動させて選択を解除する
ActiveCell
とは、現在選択されているセルのことです。
選択範囲が広がっている場合でも、別のセルをアクティブにすることで、選択状態を解除できます。
使用例:別のセルをアクティブにして選択解除
Sub DeselectCells()
' 特定の範囲(A1:B5)を選択
Range("A1:B5").Select
' A1セルを選択して選択範囲を解除
Range("A1").Select
End Sub
この方法はもっともシンプルで、処理の最後に必ずA1セルに戻すといった習慣化にも向いています。
参考:[【VBA】(アクティブ セル)ActiveCellとは]
・ Application.Gotoメソッドを使う
Application.Goto
は、特定のセルや範囲にフォーカスを移動させるメソッドです。
セルの移動と同時に画面スクロールも制御できるため、大きな表の中で処理後にA1セルへ戻すといった使い方に便利です。
使用例:Application.Gotoで選択解除
Sub DeselectWithGoto()
' A1:B5を選択
Range("A1:B5").Select
' A1セルを選択しつつ画面もスクロール
Application.Goto Reference:=Range("A1"), Scroll:=True
End Sub
Scroll:=True
を指定すると、選択セルが画面中央に表示されるため、ユーザーの視認性も向上します。
参考:[【VBA】Application.Gotoメソッドとは:セル・範囲を移動]
・ シート全体を選択して選択を解除する
あまり一般的ではありませんが、シート全体を選択することで特定の範囲選択を目立たなくすることも可能です。
見た目として「特定の範囲を選択している状態」を避けたい場合に使えます。
使用例:シート全体を選択して選択解除
Sub DeselectWithSheetSelection()
' A1:B5を選択
Range("A1:B5").Select
' シート全体を選択
Cells.Select
End Sub
ただし、シート全体が選択状態になるため、次の操作によっては全セルに影響してしまう危険があります。
この方法を使う場合は、直後に安全な操作だけを行うよう注意しましょう。
・ Protectメソッドで選択を制限する
セルの選択そのものを制御したい場合は、シートを保護して特定のセル以外を選択できないようにするという方法もあります。
これは選択解除というより、選択できない状態を作るアプローチです。
使用例:シートを保護して選択を制限
Sub ProtectSheetToDeselect()
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=False
End Sub
保護を解除する場合は、以下のようにします。
Sub UnprotectSheet()
ActiveSheet.Unprotect
End Sub
メリット:ユーザーが誤って不要なセルを選択・編集するのを防げる
デメリット:保護解除しないと選択・編集ができない
参考:[【VBA】Protectメソッド:操作制限・保護・マクロ有効]
参考:[【VBA】Unprotectメソッド:ブック・シートの保護解除]
・ Application.CutCopyModeでコピー・カットモードを解除
コピーやカットを行った直後は、選択セルが点線で囲まれた状態(マーキー表示)になります。
これを解除するには、Application.CutCopyMode = False
を使います。
使用例:コピーやカット後の選択解除
Sub DeselectAfterCopyOrCut()
' A1セルをコピー
Range("A1").Copy
' コピー後の選択モードを解除
Application.CutCopyMode = False
End Sub
この方法は、処理の最後に必ず選択状態をクリアしておきたい場合や、ユーザーに「コピー完了後の状態」を残したくない場合に有効です。
参考:[【VBA】Application.CutCopyMode:コピー・カットモード解除]
✅ シーン別おすすめの選択解除方法
- 通常の操作後に選択解除したい場合:
Range("A1").Select
などで別セルをアクティブにするのが最も簡単 - 画面位置も戻したい場合:
Application.Goto
でフォーカスとスクロールを同時に移動 - 選択範囲を目立たなくしたい場合:シート全体を選択(ただし操作ミス注意)
- 特定セル以外を選択させたくない場合:
Protect
で選択を制限 - コピーやカット後の選択を解除したい場合:
Application.CutCopyMode = False
状況によって適切な方法を選べば、マクロ実行後の見た目や操作性を大きく改善できます。
選択状態の管理は地味ですが、ユーザー体験や誤操作防止に直結する大切なポイントです。
■まとめ
Excel VBAには「選択解除」という直接的な命令は存在しませんが、工夫次第で同等の効果を実現できます。
具体的には、以下のような方法が有効です。
- 別のセルにフォーカスを移す:最もシンプルで汎用性が高い
- Application.Gotoで位置と画面を移動:視認性と作業の区切りを明確化
- シート全体を選択:特定範囲の選択を目立たなくできる(注意点あり)
- Protectで選択制限:ユーザーの誤操作を防止
- Application.CutCopyModeでコピー・カットモード解除:処理完了後の選択状態をクリア
選択状態の管理は、マクロの動作やユーザー体験に直結します。
適切な方法を選び、見た目・操作性・安全性を向上させることで、より完成度の高いVBAマクロを作成できるでしょう。