Excel 中 SUMPRODUCT 的问题:尝试计算高于给定阈值的平均减法数

Posted

技术标签:

【中文标题】Excel 中 SUMPRODUCT 的问题:尝试计算高于给定阈值的平均减法数【英文标题】:Issues with SUMPRODUCT in Excel: Trying to count the number of average subtractions above a given threshold 【发布时间】:2018-08-03 13:21:24 【问题描述】:

我有一个相当简单的问题,我似乎无法解决。现在你们中的一些人可能已经很熟悉了。

我有以下矩阵(我将其称为两个数组):

F   G   H   I   J ... R   S   T   U   V
1   0   0   1   1
4   4   2   3   5     1   2   3   1   2
2       2   3   1     2   0   1
2   1   0   0   4     0   0   3   0   0

我想取数组 1 中每一行的平均值(列 F:J)和数组 2 中每一行的平均值(列 R:V)之间的差值。例如,F2:J2 的平均值 = 3.6,R2:V2 的平均值 = 1.8,整体差异 = 1.8。然后,我想计算超过给定阈值(例如 1)的总体差异的数量,但我想忽略没有条目的行(参见 R1:V1)和/或部分缺失的条目(参见F3:J3 行中的第 2 个条目以及 R3:V3 行中的第 4 个和第 5 个条目

我很幸运被@Tom Sharpe 介绍给数组公式,并尝试将他的代码改编为a similar issue I had,例如:

=SUMPRODUCT(--((SUBTOTAL(1,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))-SUBTOTAL(1,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))>1)*(SUBTOTAL(2,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))=COLUMNS(F1:J1))*(SUBTOTAL(2,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))=COLUMNS(R1:V1))>0))

据我了解,代码尝试计算每个数组中每行的平均值之间超过 1 的差异数,只要具有完整条目的列数之间的乘积大于 0(即具有完整数据)。但是,它不断抛出#DIV/0! 错误,我认为这是因为它仍在尝试减去 F1:J1 和 R1:V1 的平均值(例如,空行),这会产生这种错误.当前示例的正确答案是 1(例如,F2:J2 [3.6] - R2:V2 [1.8] = 1.8 == 1.8 > 1)。

是否有人对如何为当前目的尝试代码有任何想法,或者对当前代码中出了什么问题有一个简短的解释?

【问题讨论】:

【参考方案1】:

你说得对,SUBTOTAL 在尝试查找仅包含空单元格的范围的平均值时会失败。

如果您想坚持并尝试使用与以前相同的方式使用数组公式进行操作,则必须将其翻转并在 if 语句中将两个范围内的所有单元格的条件设为非空白,这样除非两个范围都没有空格,否则它不会尝试取平均值:

=SUM(IF((SUBTOTAL(2,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))=COLUMNS(F1:J1))*(SUBTOTAL(2,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))=COLUMNS(R1:V1)),
--(SUBTOTAL(1,OFFSET(F1,ROW(F1:F4)-ROW(F1),0,1,COLUMNS(F1:J1)))-SUBTOTAL(1,OFFSET(R1,ROW(R1:R4)-ROW(R1),0,1,COLUMNS(R1:V1)))>1)))

这一次不幸的是我发现我无法 SUMPRODUCT 它 - 我认为这是因为存在 IF 语句 - 所以你必须使用 Ctrl 将它作为数组公式输入ShiftEnter

【讨论】:

令人着迷!我最初尝试使用 SUMPRODUCT 反转顺序,但它也对我不起作用。我猜 SUM 成功了。再次感谢汤姆,【参考方案2】:

这对你有用吗?

=IF(NOT(OR(IFERROR(MATCH(TRUE,ISBLANK(F1:J1),0),FALSE),IFERROR(MATCH(TRUE,ISBLANK(R1:V1),0),FALSE))), SUBTOTAL(1,F1:J1)-SUBTOTAL(1,R1:V1), "Missing Value(s)")

我的方法与您尝试从@TomSharp 调整的方法略有不同,因为我正在验证单元格是否有数据(不是空白),然后执行计算,否则会返回错误消息。这仍然是一个数组函数调用,所以当你输入公式时,请按ctrl+shft+enter

开头if() 的条件部分检查每个范围的单元格是否为空白:if a match( true= isblank(cell)) 表示一个单元格是空白(坏),如果没有匹配...即没有空白单元格,匹配将返回一个#NA“错误”(好)。错误是好的 = 发现错误?没有。((即没有空白单元格))

【讨论】:

非常感谢您提供的新颖解决方案 - 确实有效。我讨厌挑剔,但我想我希望有人能澄清为什么“Sumproduct”不起作用,但我已经相应地更新了我的问题。再次感谢 +1 欢迎您。请记住“接受”答案。谢谢。

以上是关于Excel 中 SUMPRODUCT 的问题:尝试计算高于给定阈值的平均减法数的主要内容,如果未能解决你的问题,请参考以下文章

sumproduct excel 多表

如何在 Excel 中为函数创建引用变量?

T-SQL 中的加权平均值(如 Excel 的 SUMPRODUCT)

Excel VBA 使用 SUMPRODUCT 和 COUNTIFS - 速度问题

excel统计非重复项公式=SUMPRODUCT(1/COUNTIF(A1:A1000,A1:A1000)),若数据范围有空值怎么解决?

在 Google 表格上工作的 SUMPRODUCT 函数在 Excel 中不起作用