1

我正在创建一个基于 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) 我查找了如何正确构建公式,但我一次又一次地出错。似乎让它工作的唯一方法是将引号保持在引号内,但我不想与字符串进行比较。

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

太感谢了。

4

4 回答 4

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"")"
于 2012-12-06T18:00:27.400 回答
1

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

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

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

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

用这个:

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

我认为它应该工作(如果我没有错过任何报价的想法)。

于 2018-12-11T02:43:10.627 回答
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,"<>4" 来说绝对没问题。我猜问题出在你的第一句话上。您的要求范围内的内容以及您尝试匹配的数据。

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

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

=COUNTIFS(F1:F20,TRUE,S1:S20,"<>4")
于 2012-12-06T18:54:11.380 回答
0

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

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & ",""Requirement"",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")"
于 2012-12-06T17:15:19.640 回答