0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel時短術】全ファイル対応!セル選択で「十字ハイライト」を表示する爆速アドインの作り方

0
Last updated at Posted at 2026-04-24

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

導入方法

  1. 上記コードを記述したExcelファイルを「名前を付けて保存」から Excel アドイン (.xlam) 形式で保存します。
  2. Excelの [ファイル] > [オプション] > [アドイン] > 下部の設定ボタンをクリック。
  3. 作成したアドインにチェックを入れれば完了です。

技術的ポイントの解説

  • Union().Select: セルの色を塗るのではなく「選択範囲」を拡張しているだけなので、ファイル保存時に余計なデータが残りません。
  • GetAsyncKeyState: マウス操作とキー入力を組み合わせることで、VBA標準イベントでは難しい「Alt+クリック」という高度な操作判定を実現しています。
  • EnableEventsの制御: Select 操作自体がイベントを発生させるため、無限ループに陥らないよう適切にイベントを制御しています。

おわりに

これで「どこ見てたっけ?」というストレスから解放されます。
特にエンジニアやアナリストなど、大量の行列をスキャンする作業が多い方には、この「Altキーでサッと解除できる」仕様はかなり重宝するはずです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?