使用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"")"
使用Start
和Finish
函数,可以将公式更改为:
.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公式的主要内容,如果未能解决你的问题,请参考以下文章