Excel vba代码不适用于循环中的第一个数字,但适用于循环中的左侧数字

Excel vba代码不适用于循环中的第一个数字,但适用于循环中的左侧数字,excel,loops,if-statement,formatting,vba,Excel,Loops,If Statement,Formatting,Vba,如果某个单元格比位于同一行但左侧有三列的对应单元格或工作簿“2014variance.xlsx”中的对应单元格(位于同一行和同一列)大或小10%,我希望自动更改单元格的颜色 Sub testing1() Dim x As Integer Dim y As Integer For x = 35 To 5 Step -3 For y = 11 To 76 Step 1 If IsNumeric(Cells(y, x).Value) Then If VBA.Abs(Cells(y, x).

如果某个单元格比位于同一行但左侧有三列的对应单元格或工作簿“2014variance.xlsx”中的对应单元格(位于同一行和同一列)大或小10%,我希望自动更改单元格的颜色

Sub testing1()

Dim x As Integer

Dim y As Integer

For x = 35 To 5 Step -3

For y = 11 To 76 Step 1

If IsNumeric(Cells(y, x).Value) Then

If VBA.Abs(Cells(y, x).Value) < VBA.Abs(0.9 * Cells(y, x - 3).Value) Or _

   VBA.Abs(Cells(y, x).Value) > VBA.Abs(1.1 * Cells(y, x - 3)) Then

     Cells(y, x).Interior.ColorIndex = 22

ElseIf VBA.Abs(Cells(y, x).Value) < VBA.Abs(0.9 *            
      Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Or _

       VBA.Abs(Cells(y, x).Value) > VBA.Abs(1.1 * 
       Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Then

     Cells(y, x).Interior.ColorIndex = 42


End If

End If

Next y

Next x

End Sub
子测试1()
作为整数的Dim x
Dim y作为整数
对于x=35到5,步骤-3
对于y=11至76,步骤1
如果是数字(单元格(y,x).Value),则
如果VBA.Abs(单元格(y,x).Value)VBA.Abs(1.1*单元格(y,x-3)),然后
单元格(y,x)。内部颜色指数=22
ElseIf VBA.Abs(单元格(y,x).Value)VBA.Abs(1.1*
工作手册(“2014variance.xlsx”)。工作表(“Sheet1”)。单元格(y,x))然后
单元格(y,x)。内部颜色指数=42
如果结束
如果结束
下一个y
下一个x
端接头

除了第2列之外,代码工作正常。我知道在第一个if条件下它不会着色。但是,我希望它在“ElseIf”条件下工作。第2列应该是蓝色的,因为这些数字低于'2014variance.xlsx'的90%。我该怎么做?多谢各位

在创建模拟环境之后,我使用了您的子过程并完成了代码。看起来你过度扩展了VBA的功能;数学没有达到你想要的。我认为您不希望
-0.9
0.9
的10%以内。我添加了几个变量,并收紧了一些部分

Sub testing1()
    Dim x As Long, y As Long, wbws1 As Double, c2 As Double, c5 As Double
    Dim xWS As Worksheet

    Set xWS = Workbooks("2014variance.xlsx").Worksheets("Sheet1")

    With ActiveSheet
        For x = 35 To 5 Step -3
            For y = 11 To 76 Step 1
                If IsNumeric(.Cells(y, x).Value2) Then
                    If CBool(.Cells(y, x).Value2) Then   '<>0
                        c2 = .Cells(y, x - 3).Value2
                        c5 = .Cells(y, x).Value2
                        If (Abs(c2 - c5) / c5) > 0.1 Then

                            .Cells(y, x).Interior.ColorIndex = 22

                        Else
                            wbws1 = xWS.Cells(y, x).Value2
                            If (Abs(wbws1 - c5) / c5) > 0.1 Then

                                .Cells(y, x).Interior.ColorIndex = 42

                            End If
                        End If
                    End If
                End If
            Next y
        Next x
    End With

    Set xWS = Nothing
End Sub
子测试1()
尺寸x为长,y为长,wbws1为双精度,c2为双精度,c5为双精度
将xWS设置为工作表
设置xWS=工作簿(“2014variance.xlsx”)。工作表(“表1”)
使用ActiveSheet
对于x=35到5,步骤-3
对于y=11至76,步骤1
如果为数值(.y,x).Value2单元格),则
如果是CBool(.Cells(y,x).Value2),则为“0”
c2=.单元格(y,x-3).值2
c5=.单元(y,x).值2
如果(Abs(c2-c5)/c5)>0.1,则
.单元(y,x).内部.ColorIndex=22
其他的
wbws1=xWS.Cells(y,x).Value2
如果(Abs(wbws1-c5)/c5)>0.1,则
.单元(y,x).内部.ColorIndex=42
如果结束
如果结束
如果结束
如果结束
下一个y
下一个x
以
设置xWS=Nothing
端接头

它使用Abs功能,但仅从-0.10->0获得0->0.10。它在我的模拟环境中运行良好。

非常感谢您的回复。你的代码可以工作。但是,VBA仍然忽略了第一列。电子表格列示为2015年1月至12月。我希望VBA将2015年的每个月与2014年进行比较。从2月到12月工作正常,但1月,即第2列,该列中没有颜色变化。您知道有什么问题吗?对于x=35到2,步骤-3将导致“应用程序定义或对象定义”错误。我想这是因为我有单元格(y,x-3),值,x-3应该是-1,这在列中是不存在的。所以我把x=35放到5,第3步。但是因为我把x=5,所以x=2无法计算。如何解决这个问题?