Excel vba代码不适用于循环中的第一个数字,但适用于循环中的左侧数字
如果某个单元格比位于同一行但左侧有三列的对应单元格或工作簿“2014variance.xlsx”中的对应单元格(位于同一行和同一列)大或小10%,我希望自动更改单元格的颜色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).
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无法计算。如何解决这个问题?