Excel 使用CountIF创建VBA公式

Excel 使用CountIF创建VBA公式,excel,vba,Excel,Vba,我正在创建一个基于2个条件的计算公式。我的逻辑又错了 当我(手动)将求和公式(COUNTIFS)输入到正确的单元格中时,它会正确求和: COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4") 国家(E4:E1362,“要求”,S4:S1362,“4”) 当我执行下面的代码行时,我没有得到任何错误,而是所有的和都是零 Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" &am

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

当我(手动)将求和公式(COUNTIFS)输入到正确的单元格中时,它会正确求和:

COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4")
国家(E4:E1362,“要求”,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) & ")"
范围(“G”和开始(组)-1.公式=“=COUNTIFS(E)和开始(组)&”:E和结束(组)&“&”要求“&”,S和开始(组)&”:S和结束(组)&“,”和Chr(34)&“4”和Chr(34)&”)
我意识到COUNTIFS正在将S列中的值与字符串“4”进行比较。所有单元格都不包含该字符串。这就是为什么我所有的值都是零。我不希望与该字符串进行比较。我希望比较的列的值不等于4

因此,我将行更改为(和变体以使其工作):

范围(“G”和开始(组)-1.公式=“=COUNTIFS(E)和开始(组)&”:E和完成(组)&“&”要求“&”,S和开始(组)&”:S和完成(组)&“,”和Chr(34)&“&Chr(34)&”和“4”)
所以,我不知所措。(1) 我手动输入公式,它就可以工作了。(2) 我在VBA中构建它,但它不能正确求和。(3) 我查看如何正确构建公式,一次又一次地出现错误。看起来唯一可行的方法是将引号保留在引号内,但我不想与字符串进行比较

这有意义吗?我不再喜欢我的工作表了。这一点也不好玩了(

非常感谢。

…尝试删除chr(34)和额外的报价-它应该与“要求”标准完全相同:

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & ",""Requirement"",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")"
范围(“G”和开始(组)-1)。公式=“=COUNTIFS(E)和开始(组)和“:E”和结束(组)和“,”要求“,”S“和开始(组)和“:S”和结束(组)和“,”4“)
我认为所有的
Chr(34)
都在妨碍您正确查看您的公式。请尝试使用
对公式进行报价

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

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

Range("G1").Formula = "=COUNTIFS(E1" & ":E20" & "," & "Requirement" & ",S1" & ":S20" & "," & Chr(34) & "<>4" & Chr(34) & ")"
范围(“G1”).公式=“=COUNTIFS(E1“&”:E20“&”、”和“要求”&“、S1“&”:S20“&”、”和Chr(34)&“4”&Chr(34)&”)
稍微修改以考虑组变量单元格G1,结果为以下公式:

=COUNTIFS(E1:E20,requirement,S1:S20,"<>4")
=国家(E1:E20,要求,S1:S20,“4”)
当测试时,它对第二个if语句S1:S20,“4”绝对有效。 我想问题在于你的第一句话。你的需求范围是什么?你想匹配什么数据

我将名为range的需求设置为cell D5,我在其中输入了一个5,并且每次我在范围E1:E20中添加额外的5时,公式都会递增。 然后我开始在S1:s20范围内输入4,这减少了我的计数

编辑 我建议的最后一件事是在F列中添加一个helper列,该列对行进行求值,以查看它是否符合要求条件,然后简单地制作公式:

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

好吧,我发现其中一个问题很简单,用“you must use”代替。 这取决于你使用的版本,有些使用“,”还有一些使用“;”。你可以试试看,我希望它解决了你的问题

第二个“要求”,我想你应该用双引号代替

为了使您的案例符合此条件:

COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4")
国家(E4:E1362,“要求”,S4:S1362,“4”)
使用以下命令:

 "=COUNTIF(E" & Start(groups) & ":" & "E" & Finish(groups) & "," & """Requirement""" & "," & "S" & Start(groups) & ":" & "S" & Finish(groups) & "," & """<>4"")"
“=COUNTIF(E”&开始(组)&“&“E”&完成(组)&“&”、“&”、“&”要求“&”、“&”S”&开始(组)&“、“&”S”&完成(组)&“、“&”4“)

我认为它应该会起作用(如果我没有遗漏任何引号的话)。

我尝试了一种不同的方法来构建这个公式,虽然我没有得到任何错误,但总和仍然是零(这意味着我仍然在与字符串进行比较):范围(“G”&Start(groups)-1。公式=“=COUNTIFS(E)&Start(groups)&”:E“&Finish(groups)&”,”“要求”和“S”以及“启动(组)”和“S”和“完成(组)”和“4”)"约翰-我完全按照你的建议做了…仍然是零。我不知道我做错了什么。很抱歉,我看错了你最初的帖子。当我看单元格中的公式时,它在4的周围仍然有引号。>:/@aerogal,你想不想在
4
周围有引号?你最初的帖子显示它周围有引号???-如果你愿意的话如果想要不带引号,只需将上面公式中的部分更改为
“,4”
我不再确定:(我试过这样做,但我遇到了一个错误。我已经尝试了很多方法来实现这一点……我知道我开始听起来好像要放弃了,对此我很抱歉。我尝试了很多排列。第二个条件是针对数字(即4)进行测试。第一个条件是针对字符串进行测试(即要求)。我甚至尝试了范围(“G”和开始(组)-1)。公式=“=计数(如果((S)和开始(组)&“:S”和完成(组)&“,”4“)”,E“&开始(组)&“:E”和完成(组)&“)--当然,我也有一个错误。感谢您抽出时间来研究这个问题。我感谢您的反馈。瑞克,我想同意您的看法。问题是,这个语句过去只是初始条件的“countif”(与需求相比)。它真的工作得很好。我有一个电子表格,里面有成百上千的需求,它们被分组到所有这些子组中,每个子组在各自的组中进行了正确的汇总。当我添加第二个条件时(只计算非4级的需求)它把这搞砸了。我得到了零和。太令人沮丧了。现在这些需求每个都分配了3行,这就是为什么该列首先测试“需求”的原因。你能给出
COUNTIFS(E4:E1362,"Requirement",S4:S1362, "<>4")
 "=COUNTIF(E" & Start(groups) & ":" & "E" & Finish(groups) & "," & """Requirement""" & "," & "S" & Start(groups) & ":" & "S" & Finish(groups) & "," & """<>4"")"