【问题标题】:VBA: Excel evaluating incorrectlyVBA:Excel 评估不正确
【发布时间】:2016-03-05 03:37:16
【问题描述】:

关于为什么 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 sn-p:

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 excel


    【解决方案1】:

    您可以尝试更简洁的 VBA 代码代码 sn-p:它可以正确完成工作:

    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 创建然后删除的其他解决方案和 cmets:表达式 J2>(2*$O$1) 等价于 J2>2*$O$1,因为乘法优先,后跟逻辑运算,因此括号(如该成员所建议的)只是可选的;该解决方案将在没有它们的情况下运行。

    【讨论】:

    • @dashnick:请不要根据您的错误假设对我的解决方案投反对票。该解决方案适用于原始公式,因为操作顺序是:首先是乘法,然后是逻辑运算,因此您添加的括号只是可选的。最好的问候,
    • @dashnick 好的,没问题。问候,
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多