1

Excel シートにフィードがあり、値がそれぞれ上下に変化した場合にセルを緑/赤で点滅させたいと考えています。誰かがこれについて助けることができますか? ありがとう。

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

       Target.Interior.ColorIndex = 36

   End If
End Sub

助けてくれてありがとう

4

2 に答える 2

0

...実際にフラッシュさせることはできませんが、シェーディングを変更することはできます...

私が行う方法は、ワークブックで使用されていない場所で、セルの古い値を格納するセルのセットを作成することです(これらのセルはWorksheet_Changeイベントで設定できます)。その後、条件付きフォーマットルールを作成するだけです。セルがセルの値をヘルパーセルの値と比較するために-大きい場合はシェーディング=緑、小さい場合はsahding=赤。

これが理にかなっていることを願っています。

于 2013-03-15T13:31:20.183 に答える
0

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 に配置されることに気付くでしょうE5上記のコードのinCells(Target.Row, 5).Valueを任意の列に置き換えることで、これを変更できます。

値が増減すると、セルが点滅して変更を反映します。

Pause関数は、この SO Post で見つかりまし

于 2013-03-15T15:18:25.940 に答える