2017-06-03 3 views
1

スコアボードを実装しているスプレッドシートがあります。 私が必要とする振る舞いは、スコア値を持つセルが列b上のセルを上昇させ、セルのスコア値がセルの近くに移動して色が赤に変わると緑色に変わるときです。変更前のVBAセーブ値

スコアが変更されたセル範囲はE5である:要するにE67

:ユーザーが列Fの番号を入力すると、スコアが列Eに上昇させ、カラムBに (同じ行に)色が緑または赤に変わる必要があります

私はこのVBAコードを作ったが、運がない。ここで

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Range("e5:e67")) Is Nothing Then 
If Target.Column = 5 Then 
    thisRow = Target.Row 
    Dim OldValue As Variant 
    Application.EnableEvents = False 
    Application.Undo 
    OldValue = Target.Value 
    Application.Undo 
    Application.EnableEvents = True 
If OldValue < Target.Value Then 
    Range("b" & thisRow).Interior.ColorIndex = 4 
ElseIf OldValue > Target.Value Then 
    Range("b" & thisRow).Interior.ColorIndex = 3 
End If 
End If 
End If 
End Sub 

は私のランキングシートの画面キャプチャです:enter image description here

+0

。 –

+0

ああ。式を介して値を変更するターゲットでは、変更イベントはトリガーされません。 'Worksheet_Calculate'イベントで作業する必要があります。 –

+0

セルe5には、ユーザーがセルf5に数値を入力すると、その値が10ポイント増加する数式があります。ユーザー入力1セルe5が10ポイント増加すると、ユーザー入力2セルe5が20ポイント増加します。 –

答えて

0

てみWorksheet_Calculateイベントを傍受することによって。 ローカル配列に古い値を保存する必要があります。これはoldValです。私は、入力E5上のスコアF5セルの数が上昇したが、セルB5が緑色に色を変更しません

Private Sub Worksheet_Calculate() 
    Static oldVal 
    If IsEmpty(oldVal) Then 
    oldVal = Application.Transpose(Range("e5:e67").Value2) 
    ReDim Preserve oldVal(5 To 67) 
    Exit Sub 
    End If 
    Dim i As Long 
    For i = LBound(oldVal) To UBound(oldVal) 
    If oldVal(i) > Cells(i, "E").Value2 Then Cells(i, "B").Interior.ColorIndex = 3 
    If oldVal(i) < Cells(i, "E").Value2 Then Cells(i, "B").Interior.ColorIndex = 4 
    oldVal(i) = Cells(i, "E").Value2 
    Next 
End Sub 
+1

あなたの例に基づいて、多くのおかげです、私は必要な完全なコードを実装することができました、今、私のVBAマクロがうまく動作しています。私はあなたの答えを正しいものとしてマークします。 –

+0

@AndréCastroよろしくお願いします。 –

0
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim i As Integer 
If Not Intersect(Target, Range("e6:e67")) Is Nothing Then 
    If Target.Offset(-1) < Target Then 
     i = 4 
    Else 
     i = 3 
    End If 
    Range("b" & Target.Row).Interior.ColorIndex = i 
End If 
End Sub 
関連する問題