Excel全ファイル対応!既存書式を汚さない「十字ハイライト」アドインをVBAで作成する(Altキー・A1セルでの解除機能付き)
はじめに
Excelで大量のデータを扱っているとき、「今どこのセルを見ているか」を見失うことはありませんか?
よくある「条件付き書式」や「セルの塗りつぶし」を書き換えるVBAでは、**「既存の書式を壊してしまう」「Ctrl+Z(戻る)が効かなくなる」**といったデメリットがあります。
本記事では、**「アドイン(.xlam)」形式で実装し、「行と列を丸ごと選択状態にする」**ことで、既存の書式を一切汚さず、かつ全てのExcelファイルで有効になる十字ハイライトツールの作り方を紹介します。
このツールの特徴
- 全ファイル対応: アドインとして導入するため、どのExcelを開いても動きます。
- 書式維持: セルの色を変えないので、色分けされた表でも安心です。
-
スマートな解除: 以下の操作で即座にハイライトを解除できます。
- A1セルを選択: 十字が消えて標準状態に戻ります。
- Alt + クリック: コピペしたい時など、一時的に解除したい時に有効。
-
コピペ保護:
CutCopyModeを判定し、コピー操作を邪魔しません。
実装コード
1. クラスモジュールの作成
クラスモジュールを挿入し、オブジェクト名を AppEventClass に変更して以下のコードを貼り付けてください。ここではWindows APIを使用してAltキーの状態を監視しています。
Option Explicit
#If VBA7 And Win64 Then
'64bit版
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#Else
'32bit版
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#End If
' Windows APIの定義(Altキーの状態を判定)
Private Const VK_MENU As Long = &H12 ' Altキーの定数
Public WithEvents App As Application
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
' 1. Altキーが押されている場合は、十字を解除して終了(コピペ時に便利)
If GetAsyncKeyState(VK_MENU) < 0 Then
GoTo ClearAndExit
End If
' 2. A1セルが選択された場合は、ハイライトを解除(スイッチ機能)
If Target.Address(False, False) = "A1" Then
GoTo ClearAndExit
End If
' 3. コピーモード中や複数セル選択時もハイライトしない
If App.CutCopyMode <> 0 Or Target.Count > 1 Then
Exit Sub
End If
' --- 十字表示処理 ---
App.EnableEvents = False
App.ScreenUpdating = False
' 行全体と列全体を選択状態にする
Union(Target.EntireRow, Target.EntireColumn).Select
Target.Activate ' アクティブセルを白抜きにする
App.EnableEvents = True
App.ScreenUpdating = True
Exit Sub
ClearAndExit:
' ハイライトを解除して通常の1セル選択状態に戻す
App.EnableEvents = False
Target.Select
App.EnableEvents = True
End Sub
2. 標準モジュールの作成
アドイン起動時にイベント監視を開始させるためのコードです。
Dim myApp As New AppEventClass
' Excel起動時に実行
Sub Auto_Open()
Set myApp.App = Application
End Sub
導入方法
- 上記コードを記述したExcelファイルを「名前を付けて保存」から Excel アドイン (.xlam) 形式で保存します。
- Excelの [ファイル] > [オプション] > [アドイン] > 下部の設定ボタンをクリック。
- 作成したアドインにチェックを入れれば完了です。
技術的ポイントの解説
- Union().Select: セルの色を塗るのではなく「選択範囲」を拡張しているだけなので、ファイル保存時に余計なデータが残りません。
- GetAsyncKeyState: マウス操作とキー入力を組み合わせることで、VBA標準イベントでは難しい「Alt+クリック」という高度な操作判定を実現しています。
-
EnableEventsの制御:
Select操作自体がイベントを発生させるため、無限ループに陥らないよう適切にイベントを制御しています。
おわりに
これで「どこ見てたっけ?」というストレスから解放されます。
特にエンジニアやアナリストなど、大量の行列をスキャンする作業が多い方には、この「Altキーでサッと解除できる」仕様はかなり重宝するはずです。