2017-02-07 6 views
1

In Spalte A habe ich Zielproduktion, in Spalte B habe ich tatsächliche Produktion, und in Spalte C habe ich das Delta zwischen den beiden. Ich möchte einfach jede Zeile in Spalte C durchlaufen und jeden Wert entsprechend einem strategischen Bucket markieren. Der Beispielcode, den ich ausprobiert habe, bevor ich zum Hauptdokument gehe, ist unten.Wenn Elsef-Anweisung Excel VBA

Mein Problem besteht in der Umgebung, wie die Aktion für die aktuelle Zelle in der Schleife ausgeführt wird. Der Code färbt nur die letzte Zelle, auf die ich geklickt habe, anstelle der Zelle, die ausgewertet wird. Irgendwelche Vorschläge?

Sub StratBuckets() 

Dim Delta As Variant 
Dim n As Integer 

n = 0   
For n = 0 To 15 
    ' works up to this point --> points to the right value 
    Delta = Worksheets("Test").Range("A1:Z1000").Find("Start Date").Offset(n, 3).Value 

    If Delta > 0 And Delta <= 10 Then 
     ActiveCell.Interior.Color = vbYellow   
    ElseIf Delta > 10 Then 
     ActiveCell.Interior.Color = vbGreen   
    ElseIf Delta < 0 Then 
     ActiveCell.Interior.Color = vbRed     
    Else   
    End If    
Next n 

End Sub 

Antwort

3

Sie müssen .Interior.Color auf der rechten Zelle anwenden.

Wenn Worksheets("Test").Range("A1:Z1000").Find("Start Date").Offset(n, 3) ist die Zelle, die Sie einfärben wollen, dann tun:

Worksheets("Test").Range("A1:Z1000").Find("Start Date").Offset(n, 3).Interior.Color = ... 
+0

Dank, das funktioniert, wie ich wollte. –

1

Ein weiterer Weg zu gehen, ist ein Bereich einzustellen DeltaRng zum Find mit:

Worksheets("Test").Range("A1:Z1000").Find("Start Date"),

dann, wenn die Find erfolgreich ist, erhalten Sie die Delta Wert 3 Spalte auf der rechten Seite mit Delta = DeltaRng.Offset(n, 3).Value.

Endlich, wenn Sie in Ihrem If Delta > 0 And Delta <= 10 Then etc .. sind, können Sie die .Interior.Color der Zelle mit DeltaRng.Offset(n, 3).Interior.Color = vbYellow ändern.

-Code

Sub StratBuckets() 

Dim DeltaRng As Range 
Dim Delta As Variant 
Dim n As Long 

For n = 0 To 15 
    ' works up to this point --> points to the right value 
    Set DeltaRng = Worksheets("Test").Range("A1:Z1000").Find("Start Date") '.Offset(n, 3).Value 

    If Not DeltaRng Is Nothing Then '<--make sure Find was successful 
     Delta = DeltaRng.Offset(n, 3).Value '<-- find the Delta value 3 columns to the right 

     If Delta > 0 And Delta <= 10 Then 
      DeltaRng.Offset(n, 3).Interior.Color = vbYellow 
     ElseIf Delta > 10 Then 
      DeltaRng.Offset(n, 3).Interior.Color = vbGreen 
     ElseIf Delta < 0 Then 
      DeltaRng.Offset(n, 3).Interior.Color = vbRed 
     End If 
    End If 

Next n 

End Sub 
+0

Dies ist ein nützliches Wissen, danke! –