使用CountIF创建VBA公式

时间:2012-12-06 17:08:13

标签: excel-vba vba excel

我正在创建一个基于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列中的值与字符串“&lt;&gt; 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)我查找如何正确构建公式,并且我一次又一次地得到错误。似乎让这个工作的唯一方法是将引号保持在引号内,但我不想与字符串进行比较。

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

非常感谢你。

4 个答案:

答案 0 :(得分:1)

我认为所有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"")"

答案 1 :(得分:1)

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

还有第二个“要求”,我认为您应该使用双引号代替。

以及您所要满足的条件:

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

使用此:

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用初始代码

进行快速测试后
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,“&lt;&gt; 4”完全正常。 我猜想问题在于你的第一个陈述。您的需求范围是什么以及您想要匹配的数据。

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

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

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