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
我有一个相当简单的问题,我似乎无法解决。现在有些人可能很熟悉。
我有以下矩阵(我将其称为两个数组):
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