John Bustos が言ったようprevious value
に、セルの を格納する別の列が必要です。この値は、ターゲットが現在高いか低いかを識別するための比較を行うために必要です。
フラッシュを実現するには、メイン UI をフリーズさせずにコードで一時停止を設定する必要があります。このコードはテストされておらず、期待どおりに動作することは保証されていませんが、非常に良い出発点として役立つはずです。
コード
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("B1:B27")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If Target.Value > Cells(Target.Row, 5).Value Then
'flash green
Target.Interior.ColorIndex = 10
Pause 0.5
Target.Interior.ColorIndex = 2
Pause 0.5
Target.Interior.ColorIndex = 10
ElseIf Target.Value < Cells(Target.Row, 5).Value Then
'flash red
Target.Interior.ColorIndex = 3
Pause 0.5
Target.Interior.ColorIndex = 2
Pause 0.5
Target.Interior.ColorIndex = 3
End If
Cells(Target.Row, 5).Value = Target.Value
End If
End Sub
'Pauses execution without holding up main UI thread
Public Function Pause(NumberOfSeconds As Variant)
On Error GoTo Error_GoTo
Dim PauseTime As Variant
Dim Start As Variant
PauseTime = NumberOfSeconds
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Exit_GoTo:
On Error GoTo 0
Exit Function
Error_GoTo:
Debug.Print Err.Number, Err.Description, Erl
GoTo Exit_GoTo
End Function
Visual Basic Editor (VBE) を開き、シート 1 をダブルクリックして、上記のコードを貼り付けます。B1:B27
ターゲット範囲内の値を変更すると、値が column に配置されることに気付くでしょうE
。5
上記のコードのinCells(Target.Row, 5).Value
を任意の列に置き換えることで、これを変更できます。
値が増減すると、セルが点滅して変更を反映します。
Pause
関数は、この SO Post で見つかりました。