如果elseif语句Excel VBA
在列AI中有目标产量,列BI中有实际产量,列C1中有两者之间的差值。 我只想循环遍历C列中的每一行,并根据战略桶标记每个值。 下面是我在进入主文档之前所尝试的示例代码。
我的问题是围绕如何执行循环中当前单元格的操作。 代码只是着色最后的单元格,而不是被评估的单元格。 有什么build议么?
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
你需要在右边的单元格上应用.Interior.Color
。
如果Worksheets("Test").Range("A1:Z1000").Find("Start Date").Offset(n, 3)
是要着色的单元格,则执行:
Worksheets("Test").Range("A1:Z1000").Find("Start Date").Offset(n, 3).Interior.Color = ...
另一种方法是将DeltaRng
范围DeltaRng
为Find
with:
Worksheets("Test").Range("A1:Z1000").Find("Start Date")
,
那么如果Find
成功,则获取Delta = DeltaRng.Offset(n, 3).Value
右边的Delta
值3列。
最后,当你在If Delta > 0 And Delta <= 10 Then
等内部时,可以用DeltaRng.Offset(n, 3).Interior.Color = vbYellow
修改单元格的DeltaRng.Offset(n, 3).Interior.Color = vbYellow
。
码
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