エクセルれんと(7)

昨日の日記に対するnanashiiさんのコメントを受け、以下のハンドラをワークシートに用意すればいいことに気づいた。


'ひとつ前の選択範囲を記憶しておく
Public rLastRange As Range
Private Sub Worksheet_SelectionChange(ByVal rTarget As Range)

If (Not rLastRange Is Nothing) Then

'ひとつ前の選択範囲のすべてのセルにおいて再代入を行なうことによって
'そこを参照しているセルの再計算を促す
For Each rCell In rLastRange
rCell.Formula = rCell.Formula
Next rCell

End If

Set rLastRange = rTarget
End Sub

前回選択していたセルの範囲をglobal変数に保存し、そのエリアに対してセルの式の再代入を行なうことでそれらのセルを参照しているセルの再計算を促す。


上のプログラムを利用すれば、A1のセル(の色や書式等)が更新されたときにのみ呼び出したいハンドラは、どこかのセルに


=SomeHandler(A1)
と書いておくだけで良い。上のプログラムとCountColor(もはや「自動再計算」関数に指定する必要すらない)とを組み合わせれば背景色をカウントすることなど造作ない。素晴らしいhackだ!nanashiiさん、ありがと!