Excel 如何为多组数据动态构建COUNTIFS公式(运行时错误';1004';)

Excel 如何为多组数据动态构建COUNTIFS公式(运行时错误';1004';),excel,vba,Excel,Vba,我是VBA新手,从其他人那里继承了一份需求跟踪电子表格,目前正在更新。已使用当前VBA代码对需求进行了正确分组和汇总。我尝试更新的特定块(例如,有多个级别): 我需要向COUNTIF添加一个额外的条件,所以我使用COUNTIF。我只想计算不是级别4的需求(它们可以是级别1、2、3或4)。我尝试了以下逻辑的变体: For groups = 1 To i ' Level 3 grouping Range(Cells(Start(groups), 1), Cells(Finish(group

我是VBA新手,从其他人那里继承了一份需求跟踪电子表格,目前正在更新。已使用当前VBA代码对需求进行了正确分组和汇总。我尝试更新的特定块(例如,有多个级别):

我需要向COUNTIF添加一个额外的条件,所以我使用COUNTIF。我只想计算不是级别4的需求(它们可以是级别1、2、3或4)。我尝试了以下逻辑的变体:

For groups = 1 To i ' Level 3 grouping

    Range(Cells(Start(groups), 1), Cells(Finish(groups), 1)).Rows.Group

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

    Range("H" & Start(groups) - 1).Formula = "=COUNTIF(H" & Start(groups) & ":H" & Finish(groups) & ",""Ok"")"

Next
对于组=1到i'三级分组
范围(单元格(开始(组),1),单元格(结束(组),1))。行。组
范围(“G”和启动(组)-1。公式=“=COUNTIFS(E)和启动(组)&”:E和完成(组)&“&”要求“&”,S和启动(组)&”:S和完成(组)&“,”4“)
范围(“H”和开始(组)-1。公式=“=COUNTIF(H)”和开始(组)和“:H”和结束(组)和“,”确定“)
下一个
在执行宏之前,我尝试在正确的单元格中手动输入公式,公式正确地更新了总和。但是,当我运行宏时,总是会得到以下结果: 运行时错误“1004”应用程序定义错误或对象定义错误

我意识到我有很多引用,有些可能会被合并;然而,我更关心的是为什么逻辑会失败。你能帮忙吗?我花了太多的时间在探索不同的途径上

提前谢谢你


在此之后,我将不得不学习如何隐藏每个“4级”需求(这意味着该行和下面的2行),但这是另一个主题。我想我应该先试试更简单的逻辑。

在双引号中使用双引号是你的问题。改用
Chr(34)

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)&”)
方法返回指定索引号处的ASCII字符。在这种情况下,Chr(34)返回双引号字符。有关ASCII字符的详细信息,请查看下表:

编辑:

或者,也可以使用双引号,如下所示:

Range("A1").formula = "=COUNTIF(B:B,""<>4"")"
Range(“A1”).formula=“=COUNTIF(B:B”,“4”)”
而不是

Range("A1").formula = "=COUNTIF(B:B," & Chr(34) & "<>4" & Chr(34) & ")"
Range(“A1”).formula=“=COUNTIF(B:B)”&Chr(34)和“4”&Chr(34)和”

最简单的方法是调试。打印您的公式字符串,然后在即时窗口中或通过将其复制到工作簿中,查看它有什么问题。以“
”=COUNTIFS…
开始公式,然后您可以删除工作表中的单个引号,并获得更具描述性的错误消息。谢谢!我怀疑我的错误与引号的使用有关。我非常熟悉ASCII字符,这是编程时的一种方式;但是,我不知道Chr()用法。您的帮助使我又少了一天的头痛。我下一步将转向删除行。我会尝试一下,但如果我再次陷入困境,可能需要回复您。再次感谢您!我非常感谢您的反馈。
Range("A1").formula = "=COUNTIF(B:B," & Chr(34) & "<>4" & Chr(34) & ")"