マクロでクリックしたセルを目立たせる

動画でExcel マクロでクリックしたセルを目立たせる
マクロでクリックしたセルを目立たせる
12回のマクロはシート上のクリックしたセルを目立たせるという内容です。
似たような内容の動画を今まで2回ご紹介していますので、用途に応じて使い分けていただきたいと思います。
1つは、Excel Tipsで紹介しました。 Excel塾のエクセルチップス4回
マクロは使わずに条件付き書式で、その対象を、
ハイライトして目立たせるというものです。
もう一つは、スキルアップのExcel仕事術8回で紹介したものです。
このドロップダウンリストで選択した項目が
ハイライトされるというものなんです。
(サンプルファイルは、こちらです。 マクロでクリックしたセルを目立たせる、サンプル12回)
マクロ動画 マクロでクリックしたセルを目立たせる
今どこのセルを操作していたのか見失わないマクロ
マクロを使わなくても条件付き書式でセルをハイライトすることはできるのに、なぜマクロのコードを使うかというと、それはいちいち設定を変更するのが面倒という理由からです。
また今回紹介するケースでは、どこを選んでも、クリックしたセルの列と行をハイライトするというものなので、汎用性が高いのです。

今回ご紹介するマクロは、イベントで行います。
サンプルには、まだ何もデータを入れてないですが、データが大量に入ってたりすると
今どこまでやったっていうのが、一瞬分からなくなっちゃう事がありました。
このマクロをブックに設定しておくと、それ分かるわけです。
他のブックやシートを見たあとで、戻ってきたときにも、今までここの行のこのセルをやってたんだなってことが分かるんですね。

このマクロはブックのコード画面に記述します。

オブジェクトボックスには、Workbookと表示されています。またプロシージャ―ボックスからは、SheetSelectionChangeを選択して記述したわけです。
そして、これ引数がByVal Sh As Object, ByVal Target As Range
ということで、引数を2つとっておりますが、意味は対象はシートで、
ターゲットはレンジですという意味になります。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Range)

最初にいつもとは逆ですが、
Application.ScreenUpdating = True
Trueいうのは Trueにしておかないと、ターゲットが変わった時の背景色の変化が見れないわけですから
Trueにしておきましょう。
(いつもは画面がちらつくので、Application.ScreenUpdating = Falseを始めに設定して、コードの終わりで Trueに戻すことが多いです。)

値が消えないSTATIC静的変数
次のコードが重要です。
Static CurrentTarget As Range
CurrentTarget という変数を作って、それをStaticなRangeとしたのです。
これは静的変数と言いまして、動的ではないということは、図のように、ブックのシート上ではセルの選択を終わっています。
セルに対応する範囲の列と行のハイライトも終わっているわけです。
マクロのコード画面がアクティブになっています。それでもシート上のハイライトはそのままです。

マクロの実行は終わっています。通常だと終わったら設定した変数は消えます。
終わったのに消えてないから、戻ってきた時にまだセルがハイライトしたままで、処理していたセルの位置がわかるんです。
それが値が消えないスタティック静的変数ということで
カレントターゲットはスタティックです。
Static CurrentTarget As Range
次のコードは、CurrentTargetがNothing(つまり、何も選択されていない状態)でないことを確認しています。 前のハイライトを解除する為に、その色を消すコードです。
If Not CurrentTarget Is Nothing Then CurrentTarget.Interior.ColorIndex = xlNone CurrentTarget.EntireColumn.Interior.ColorIndex = xlNone CurrentTarget.EntireRow.Interior.ColorIndex = xlNone End If
このExcel VBAコードのCurrentTargetは、特定のセル範囲を指す変数です。
具体的には、直前に選択されたセルまたはセル範囲を記憶しています。
Workbook_SheetSelectionChangeイベントは、ユーザーが新しいセルまたはセル範囲を選択するたびに実行されます。
このイベント内でCurrentTargetを使う主な目的は、新しいセルが選択されたときに前回選択されたセル範囲のハイライトを解除することです。
If Not CurrentTarget Is Nothing Thenの行は、
「もしCurrentTargetに何らかのセル範囲が設定されていれば(つまり、これが最初の選択でなければ)」という意味です。
CurrentTargetがNothing(つまり、何も選択されていない状態)でないことを確認しています。

上記の3行を記述することで、前回選択されたセル、そのセルが属する列、および行全体の色をクリアしています。
つまり、このコードのCurrentTargetの部分は、「新しいセルを選択するたびに、以前選択したセル範囲のハイライトを消して、新しく選択したセル範囲をハイライトする」という動作を実現するためのものです。
最初にこのマクロが実行されたときはCurrentTargetは何も指していないので(Nothing)、何もハイライトを解除しませんが、その後は常に最後に選択された範囲を覚えておき、新たにセルを選択するたびにその範囲のハイライトを解除します。
以下にコード全体を記述しました。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Range) Application.ScreenUpdating = True Static CurrentTarget As Range If Not CurrentTarget Is Nothing Then CurrentTarget.Interior.ColorIndex = xlNone CurrentTarget.EntireColumn.Interior.ColorIndex = xlNone CurrentTarget.EntireRow.Interior.ColorIndex = xlNone End If Target.EntireColumn.Interior.ColorIndex = 35 Target.EntireRow.Interior.ColorIndex = 36 Target.Interior.ColorIndex = 44 Set CurrentTarget = Target End Sub
特定のシートだけの選択セルをハイライトしたい
特定のシート以外で、セルを移動するたびに、ハイライトで強調されては、鬱陶しい場合もあります。
そこで、限定シートだけをハイライト表示にするというコードを以下に用意しました。







