【问题标题】:Different solving method for Excel Formula and WorksheetFunction formula?Excel公式和WorksheetFunction公式的不同求解方法?
【发布时间】:2015-02-03 01:29:58
【问题描述】:

我一直在我的一个代码中使用application.worksheetfunction.countifs,但它似乎突然停止工作。我以相同的格式将代码输入到 excel 中,它可以正常工作,但 VBA 代码不能。

=COUNTIFS($D$2:$D$2582,  ">0", $E$2:$E$2582, E3, $L$2:$L$2582, L3, $B$2:$B$2582, B3, $T$2:$T$2582, "<=" & T3, $U$2:$U$2582, "<=" & U3)

宏中使用的VBA代码:

For Each Cell In Range("R2:R" & LastRow)
    If Cell.Offset(0, -3) = "" Then
    Cell.Value = ""
    Else: Cell.Value = Application.WorksheetFunction.CountIfs(Range("D2:D" &
          LastRow), ">" & 0, Range("E2:E" & LastRow), Cell.Offset(0, -13), 
          Range("L2:L" & LastRow), Cell.Offset(0, -6), Range("B2:B" & 
          LastRow), Cell.Offset(0, -16), Range("T2:T" & LastRow), "<=" & 
          Cell.Offset(0, 2), Range("U2:U" & LastRow), "<=" & Cell.Offset(0,
          3))
    End If
Next Cell

我还尝试将第一个搜索条件设为"&gt;0",但这根本没有改变输出。

我对自己做错了什么感到完全困惑,因为它前一刻还在工作,然后突然它只在下一分钟根据公式计算了一些细胞。

是的,我知道我没有在 excel 代码中包含空白单元格的参数,但这不是导致代码问题的原因。

请帮忙。

【问题讨论】:

  • 我认为您需要在代码或电子表格中提供有关您可能已更改的内容的更多信息。您真的希望我们相信您的计算机“突然”改变了它执行代码的方式吗?
  • 如果你还是使用带循环的 VBA,为什么不直接使用 if 语句和变量来计算呢?
  • 那些没有下划线_的新代码行是否继续?
  • LastRow的值相当于2582。另外,我把代码中的下划线去掉了,避免混淆,让代码更容易理解。

标签: vba excel


【解决方案1】:

尝试将Cell.Value = Application.WorksheetFunction... 替换为Cell.Formula = 并构建一个表示所需公式的字符串。您已经说过,输入公式时,会产生正确的结果。通过代码复制该公式也将产生正确的结果。

Application.WorksheetFunction 只返回函数的结果,如果不进一步检查您的代码,您将看不出这个公式与有效公式有何不同。

【讨论】:

  • 我会尝试一下,看看它是如何工作的。谢谢!
  • 这是我使用的代码,它运行良好。 Sheets("LoadTables_Blanks").Range("R2").Formula = "=CountIfs($D$2:$D$" &amp; LastRow &amp; ", ""&gt;0"", $E$2:$E$" &amp; LastRow &amp; ", E2, $L$2:$L$" &amp; LastRow &amp; ", L2, $B$2:$B$" &amp; LastRow &amp; ", B2, $T$2:$T$" &amp; LastRow &amp; ", ""&lt;="" &amp; T2, $U$2:$U$" &amp; LastRow &amp; ", ""&lt;="" &amp; U2)" Range("R2").Select Selection.AutoFill Destination:=Range("R2:R7"), Type:=xlFillDefault 但是,我宁愿使用 WorksheetFunction.Countifs 以便代码运行得更快。我真的看不出我的问题出在哪里。
  • 如果您发现答案有帮助,请点赞和/或接受是有礼貌的。期望看不到您原始电子表格的人虚拟地查看您的肩膀并评估您的公式是不合理的。
【解决方案2】:

原来 VBA 代码很难读取搜索条件中的小数位数。因此,很难将两个无限舍入的数字相互比较。我不确定为什么 Excel 公式有效,但是 VBA 没有,但是,在我的搜索条件中的单元格之前的一个简单的Round() 代码解决了问题。谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多