我正在创建一个基于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)我查找如何正确构建公式,并且我一次又一次地得到错误。似乎让这个工作的唯一方法是将引号保持在引号内,但我不想与字符串进行比较。
这有意义吗?我不再喜欢我的工作表了。它根本不再有趣。 :(
非常感谢你。
答案 0 :(得分:1)
我认为所有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"")"
答案 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")