>画面に表示される行範囲がスクロール、倍率変更、その他の方法で >変更されたことをリアルタイムで知る方法 は、たぶん無いでしょう。しかし、色の変更はあくまでデータを変更する ことをトリガーにするわけだから「入力データが変更された → そのとき そのセル範囲と、そのセル範囲に関係していて現在、可視状態にある範囲を 着色する」という処理でよいはずですね ? ならば例えば以下のようなコードで 出来ると思います。
Private Sub Worksheet_Change(ByVal Target As Range) Dim MyR As Range 'Cells.Interior.ColorIndex = xlNone On Error Resume Next Set MyR = Intersect(Target.DirectDependents, _ ActiveWindow.VisibleRange) If Not MyR Is Nothing Then MyR.Interior.ColorIndex = 5 Set MyR = Nothing: Err.Clear End If Target.Interior.ColorIndex = 6 End Sub
ただ、私にはどうも "リアルタイム処理に拘りすぎ" との印象がぬぐえません。 多くの入力データを更新しても、色の変更は別のタイミングでも良いのなら、 Worksheet_Activate や Worksheet_Deactivate とか Workbook_BeforeClose など、許容できるタイミングでの処理に変更することを検討して下さい。
この記事にはVBAのコードが含まれています。
緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他
|