ダウンロード

選択したセルの行列を目立たせる

大きな表になると、選択しているセルがどの行項目/列項目に相当するか判り難い場合があります。

ウィンドウの行/列固定は面倒だし、他に不便が生じる場合があります。

このような場合に 
選択セルと同じ行と列がハイライト
されると見やすくなる事があります。
かといって、
メニュー
仕様
1.簡易設定
 仕様
 条件付き書式
2.自動で再計算
 VBAコード
3.表内に限定
 VBAコード
不具合発生(コピー/貼り付け)
 VBAコード
サンプルファイルのダウンロード
リンクリスト

簡易設定

仕様

下の表イメージ


表の中のセルを選択すると、選択セルと同じ行、および
同じ列のセルがハイライト(薄い水色)される。



条件付き書式

条件付書式で条件を満たす場合にセルの色を「薄い水色」で設定します。

必要な関数

CELL("row") , CELL("col")
 それぞれアクティブな(選択されている)行/列番号を返す
ROW(Target) , COLUMN(Target)
 それぞれ、Targetの開始行/列番号を返す
 Targetは表の範囲に付けた名前

設定条件

設定した条件は、以下の条件を満たすこと

・セルの行番号が選択されているセル(以降アクティブセルと呼ぶ)の行番号と等しい、
・または、列番号が選択されているアクティブセルの列番号と等しい

設定する数式

以上を数式化すると、
 =OR(ROW()=CELL("row"),COLUMN()=CELL("col"))
アクティブなセルの行または列番号が、選択セルと一致

条件付き書式


条件付き書式の中に、前述の数式を入力します。

動作確認

現在と異なるセルを選択して、ファンクションキーの[F9]を押します。
[F9]はワークシート内再計算するショートカットキーです。


エクセルファンクションキー一覧

選択セルを含む行列がハイライトされるさることを確認します。
右隣の「今の時刻」が変化することにより、セル内が再計算されたことがわかります。





ただし・・・・・・・・・・・・・・・・

いちいち[F9]キーを押すのも面倒ですね!

CELL関数は現在アクティブなセルの情報を返してくれるのですが、
残念なことに、アクティブセルが変更された場合に自動では再計算してくれません

そこで、セルを選択しただけ自動でハイライトされるように、少しだけマクロ(VBE)を使用することにします。
すなわち、選択セルが変更されたときに再計算されるようにすることです。

エクセルのVBEはイベントドリブン方式(事象型駆動)で、事象が発生したときに該当プログラムが呼び出される)となっています。
この場合、イベント(選択セルが変更された)は SelectionChange となりますので、 この中にコードを書きます。

2.自動で再計算


:ダウンロードファイルには、マクロが設定されています。
マクロの実行有効にしてください。
有効にしない場合は、プログラムの実行は出来なくなります。

VBAコード

注:ダウンロードファイルには、マクロが設定されています。
特にマクロを有効にする必要はありませんが、実行は出来なくなります。

マクロ(VBA)は、専用のエディタ(VBE)をを使用して記述します。

1.「開発」タブからVBE(Visual Basic Editor)を起動

  「開発」タブ → 「開発」リボン → VisualBasic



  「開発」タブがリボンメニューに無い場合 → 開発タブの表示方法

2.Worksheet サブルーチン作成

コンボボックス(オブジェクトの選択)から、Worksheet を選択



Worksheet_SelectionChange というサブルーチンが生成されました。


3.コード記述

自動で追加されたコードの中に、
   ActiveSheet.Calculate
を追加します。下図参照
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
End Sub




Worksheet_SelectionChang は、ワークシートの選択セルの場所が変化したときに呼び出されます。

そして、呼び出されたときに、   を実行(これは選択シートを再計算する命令)。

すなわち、選択位置が変わる度に、シート内の計算式(条件付書式や入力規則内の式を含む)が再計算され、書式が変更されることになります。

でも似た様な動作をしますが、画面の再表示(同時に再計算)の命令なので、画面全体がちらつく場合があります。
グラフなどの図形がある場合は特に気になります。

3.表内に限定

追加仕様

少し気になることが・・・
前項でほぼ完成なのですが、表の外をクリックしても、条件付き書式が作動してしまうのが少し気になります。



これはこれで使い道があるのですが・・・・

そこで、VBAを少し改良します。

追加コード

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("Table")) Is Nothing Then
        ActiveSheet.Calculate   'シート再計算
    End If

End Sub
Intersect メソッドは、2つの領域の交差した範囲を返します。

Application.Intersect メソッド (Excel)

複数のセル範囲の共有セル範囲を表す Range オブジェクトを返します。
構文
式 . Intersect( Arg1, Arg2, ・・・ Argn )
パラメーター
Arg1 必須、Range セル範囲 (Range オブジェクト) の名前を指定。
Arg2 必須、Range セル範囲 (Range オブジェクト) の名前を指定。
Argn 省略可

パラメータに"Table"と"Target"を表す範囲を指定した場合、  
Application.Intersect(Range("Table"),Range("Target"))

下図の例では、黄色の部分を表す範囲(Range("C4:C6"))が返却されます。




下図の例では、交差がないので、Nothing が返却されます。


動作確認

下記の動作を確認

表内をクリック → クリックしたセルが含まれる行列がハイライト
表外をクリック → ハイライト部分に変化無し、今の時刻も変化しない


不具合発生(コピー/貼り付け)

「コピー/貼り付け」への影響

試してみるとわかりますが、
1.セルに文字を入力して、コピー
2.別のセルを選択して右クリック
して「貼り付け」ようとしても、下図のように、貼り付けオプショングレーとなって操作不可となってしまします。

原因

これは、以下の行に原因があるようです。  
ActiveSheet.Calculate 'シート再計算
再計算を実行すると、クリップボードをクリアしてしまうようです。
(何故、そのようなことをする必要があるかは不明)

対処

そこで、CELL("row),CELL("col") および Calculate を使用せず、 選択されている行列番号はVBAで直接取得し、 選択行、選択列 のセルに書き込みます。
 (選択セルの行番号/列番号を書き込むためのセルには、"選択行"、"選択列"の名前を付ける)
条件付き書式は、この名前を参照

コード

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("Table")) Is Nothing Then
        Range("選択行") = ActiveCell.Row
        Range("選択列") = ActiveCell.Column
    End If
End Sub
    

条件付き書式 




=OR(ROW()=選択行,COLUMN()=選択列)
これで、コピー貼り付けへの影響はなくなりました。

以上、完成


×
PageTop