行列双方向で大きな表を扱っていると、今、どこを操作しているのかわからなくなり、迷子になることがあります
昨日、twitterで見つけた記事↓から、この迷子問題に対する大いなる示唆を得ました
https://hamachan.info/win7/Excel/active.html
こちらの記事を元にして、作成したのが下の表です
勤務スケジュール内で、カーソルを置いた行列がハイライトされつつ、勤務者の顔が表示され、ダイナミックに動きます
!今回のポイント
・条件付き書式の使い方
ⅰ)Cell関数とColumn関数、Row関数
Cell関数はセルの情報を返す関数です
このCell関数と列番号と行番号を返すColumn関数と、Row関数を組み合わせて条件付き書式の条件にします
ⅱ)OR条件
ハイライトしたいのは、カーソルを置いた行と列の位置です
こちらを「カーソルを置いた行」もしくは「カーソルを置いた列」
と解釈し直します
ⅰ)ⅱ)を組み合わせて設定した条件付き書式の画面が次の画像です
・イベントプロシージャ―
条件付き書式を設定しただけでは、うまくハイライトされません
カーソルの位置を変えた時に、更新処理が強制的に行われるようにイベントプロシージャ―を入れます
ⅰ)コードを表示
ⅱ)更新処理の組み入れ
下の「Worksheet」⇒「SelectionChange」から更新を行うコードを入力します
Application.ScreenUpdating = True
上のコードを入力することで、カーソルの位置を変更すると強制的に画面更新が行われ、条件付き書式もうまく稼働します
・画像のダイナミック表示
更に、2つの仕掛けを付け加えて”選択したセルにある名前”と対応する画像を表示できるようにします
こちらは、名前機能とカメラ機能を3段階で活用します
セル内の名前⇒別シートにコピー⇒別シートをカメラで参照
1.別シート(計算シート)に選択したセルの内容をコピーする
条件付き書式を強制的に稼働させるために作成したイベントプロシージャ―内に以下のコードを入れます
Worksheets(“計算シート”).Range(“C3”).Value = Target.Value
すると、計算シートにカーソルを置いたセルにある内容がコピーされます
以下は、実際に設定したコードです
複数セルが選択されると、条件付き書式がうまく動かない為、制御を入れています
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
If Target.Count > 1 Then
MsgBox “複数のセルは選択できません!”, vbCritical
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
Worksheets(“計算シート”).Range(“C3”).Value = Target.Value
End Sub
2.名前とカメラ機能を組み合わせて画像をダイナミック表示する
①下のような表を作成し、各画像が入ったセルに「人の名前」と同じ名前(名前管理)をつける
こちらの名前を作成する処理は、以下の画面で簡単に設定できます
「選択範囲から作成」をクリックし、下の画像の「チェック」の箇所で設定します(上の表の名前の列が、左端列になるようにします)
②名前の管理画面にて、計算シートに入力された名前を参照する名前(名前管理)を設定する
こちらはINDIRECT関数を使用します!
③カメラ機能で②の名前を参照する(数式バーにて)
カメラ機能が参照しているセルは数式バーに表示されます
数式バーを②で作成した名前を組み入れます
カメラ機能の詳細については以下を参照してください
INDIRECT関数については以下を参照してください
画像変える技術については、こちらもぜひご参照ください
以上です。ちなみに画像は以下より拝借させていただきました
http://kara1.blog92.fc2.com/blog-category-9.html
コメントを残す