VBA:Excel计算不正确

VBA:Excel计算不正确,vba,excel,Vba,Excel,我一直在追问为什么excel会将4>0之类的东西评估为错误 在vba中,我应用以下R1C1公式: =IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"") 当宏运行时,会变成: =IF(AND(I2>$O$1,J2>2*$O$1,K2>3*$O$1),"CORE","-") 但是,如果我们看第2行的屏幕截图 I2、J2、K2都设置为值4,大于O1值0,但excel将其计算为fal

我一直在追问为什么excel会将4>0之类的东西评估为错误

在vba中,我应用以下R1C1公式:

=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")
当宏运行时,会变成:

=IF(AND(I2>$O$1,J2>2*$O$1,K2>3*$O$1),"CORE","-")
但是,如果我们看第2行的屏幕截图 I2、J2、K2都设置为值4,大于O1值0,但excel将其计算为false

为什么??两个字段的格式都是数字

完整vba代码段:

Public Sub FormatCore()
    Rows("1:1").Select
    With ActiveWindow
    Range("B2").Select
    ActiveWindow.FreezePanes = False
    ActiveWindow.FreezePanes = True
    End With
    Range("N2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")"
    Range("N3").Select
    Range("N2").Select
    Dim total_rows As Double
    total_rows = Worksheets("Report").Cells(Worksheets("Report").Rows.Count, "A").End(xlUp).Row
    Selection.AutoFill Destination:=Range("N2: N" & total_rows)
End Sub

您可以尝试一个更干净的VBA代码段:它正确地完成了任务:

Public Sub FormatCore()
    Dim total_rows As Double
    total_rows = Worksheets("Report").Cells(Worksheets("Report").Rows.Count, "A").End(xlUp).Row
    Range("N2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")"
    Selection.AutoFill Destination:=Range("N2: N" & total_rows)
End Sub
希望这会有所帮助


注意关于@dashnick成员提出并随后删除的其他解决方案和注释:
J2>(2*$O$1)
表达式相当于
J2>2*$O$1
,因为乘法优先,然后是逻辑运算,因此括号(如该成员所建议)只是可选的;没有他们,这个解决方案就行。

@dashnick:请不要因为你的错误假设而否决我的解决方案。解决方案与原始公式配合得很好,因为操作顺序是:先乘法,然后逻辑运算,因此添加的括号只是可选的。向你问好,@dashnick好的,没问题。当做