使用CountIF创建VBA公式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CountIF创建VBA公式相关的知识,希望对你有一定的参考价值。

我正在创建一个基于2个条件计算的公式。我的逻辑错了 - 再次。

当我(手动)输入代码总和公式(COUNTIFS)到正确的单元格本身时,它正确地求和:

COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4")

当我执行以下代码行时,我没有得到任何错误,而是所有的总和都是零。

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & "," & Chr(34) & "<>4" & Chr(34) & ")"

我意识到COUNTIFS正在将S列中的值与字符串“<> 4”进行比较。没有一个单元格包含该字符串。这就是为什么我的所有值都为零。我不希望比较与该字符串相对。我希望比较是列S值不等于4。

所以,我将线路更改为(和变化以使其工作):

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & "," & Chr(34) & "<>" & Chr(34) & "4)"

所以,我不知所措。 (1)我手动输入公式,它的工作原理。 (2)我在VBA中构建它,并没有正确地求和。 (3)我查找如何正确构建公式,并且我一次又一次地得到错误。似乎让这个工作的唯一方法是将引号保持在引号内,但我不想与字符串进行比较。

这有意义吗?我不再喜欢我的工作表了。它根本不再有趣。 :(

非常感谢。

答案

我认为所有Chr(34)都妨碍你正确查看你的配方。尝试使用""来制作公式的引用。

.Formula = "=COUNTIFS(E4:E1362,""Requirement"",S4:S1362,""<>4"")"

使用StartFinish函数,可以将公式更改为:

.Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & _
    ",""Requirement"",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")"
另一答案

好吧,我发现的一个问题很简单,而不是使用“,”你必须使用“;”。这取决于您使用的版本,有些使用“,”,有些使用“;”。你可以尝试一下,我希望它能解决你的问题。

在那里,第二个“要求”,我认为你应该使用双引号。

并为您的情况满足此条件:

COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4")

用这个:

 "=COUNTIF(E" & Start(groups) & ":" & "E" & Finish(groups) & "," & """Requirement""" & "," & "S" & Start(groups) & ":" & "S" & Finish(groups) & "," & """<>4"")"

我认为它应该工作(如果我不错过任何引用的想法)。

另一答案

...尝试删除chr(34)和额外的引用 - 它应该看起来完全像“要求”标准:

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & ",""Requirement"",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")"
另一答案

使用初始代码运行快速测试后

Range("G1").Formula = "=COUNTIFS(E1" & ":E20" & "," & "Requirement" & ",S1" & ":S20" & "," & Chr(34) & "<>4" & Chr(34) & ")"

略微修改以考虑您的组变量单元格G1最终得到以下公式:

=COUNTIFS(E1:E20,requirement,S1:S20,"<>4")

在测试时,对于你的第二个if语句S1:S20,“<> 4”,它完全正常。我猜想问题在于你的第一个陈述。您的需求范围是什么以及您要与哪些数据匹配。

我将名为range的要求设置为单元格D5,我在那里输入了5,并且每次我在E1:E20范围内添加额外的5时公式将递增。然后我开始在S1:s20的范围内键入4,这减少了我的计数。

编辑我可以建议的最后一件事是在F列中添加一个辅助列,它评估行是否符合需求条件,然后制作公式就是一个简单的事情:

=COUNTIFS(F1:F20,TRUE,S1:S20,"<>4")

以上是关于使用CountIF创建VBA公式的主要内容,如果未能解决你的问题,请参考以下文章

唯一计数(Excel VBA 与公式)更快的方法

如何为以下示例创建自定义格式、公式或 VBA 代码?

vba 调用 countif 函数问题

自动填充 Application.Countifs.Formula VBA Excel

CountIf 和小计

Excel VBA:如何让 COUNTIF 函数不将文本单元格“1.1”和“1.10”作为重复项?