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

Issues with SUMPRODUCT in Excel: Trying to count the number of average subtractions above a given threshold

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

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

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)and/or部分缺失条目(参见行 F3:J3 中的第二个条目和行 R3:V3 中的第四个和第五个条目).

我很幸运 @Tom Sharpe, and have attempted to adapt his code for 介绍了数组公式,例如:

=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)。

有没有人知道如何尝试将代码用于当前目的,或者对当前代码中出现的问题做一个简单的解释?

这对你有用吗?

=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 改编的方法略有不同,因为我正在验证单元格是否有数据(不是空白)然后执行计算,否则 return 一条错误消息。这仍然是一个数组函数调用,因此当您输入公式时,按 ctrl+shft+enter

开头的条件部分 if() 检查每个范围的单元格是否为空:if a match( true= isblank(cell)) 表示单元格为空白(坏),如果没有匹配...即没有空白单元格,Match 将 return 和 #NA "error"(好)。假就是好 = 发现错误?编号((即没有空白单元格))

没错,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[=20 将其作为数组公式输入=]ShiftEnter