数组公式混乱
Array Formula Confusion
我正在为一个数组公式苦苦挣扎,这在逻辑上似乎是合理的,但它似乎无法正常工作。我一直在研究一个复杂的 sheet,它不包括 VBA,这使得它的公式很重,而是使用数组。
在下图中,第一部分是问题所在,对于 A-F 列中显示的数据,我希望得到与 I1:K1 中的值匹配的值的总和。
我开始使用的公式也可以在第一张图片中看到,这会计算,按 F9,给我所需的输出 20,40 和 50。但是当我添加 SUM
围绕公式,我只得到第一个结果。
我认为这是一个问题,因为我在这个问题上看不到树木。
提前致谢。
这个数组公式似乎有效:
=SUM((IFERROR(MATCH(A1:F1,I1:K1,0),0)>0)*A2:F2)
可能有多个更好的公式可以实现相同的目的。
但是要说说为什么会失败:
这是因为 OFFSET function returns 是一个引用而不是一个值。因此在这个数组公式中使用它 returns 引用数组 {B2,D2,E2}
而不是导致问题的值数组 {20,40,50}
。
如果您正在使用:
=SUMPRODUCT(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1))
然后使用计算公式,您将得到:
SUMPRODUCT({#VALUE,#VALUE,#VALUE})
在最后一步的旁边,结果为 0。所以 OFFSET
导致错误值,因为它 returns 一个引用数组,不会自动取消引用,因此每个引用都会变成 #VALUE
错误。
如果您正在使用
=SUMPRODUCT(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))
然后它工作 returns 110。所以 N
取消引用每个 OFFSET
的引用,所以整个公式导致值数组 {20,40,50}
在总和
{=SUM(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))}
也有效。
这些问题是在数组公式中使用 OFFSET
和 INDIRECT
等函数时出现的,其中 returns 引用而不是值。并且在 OFFSET
或 INDIRECT
周围有一个取消引用函数可以解决问题。
同理:
=SUMPRODUCT(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE))
对比
=SUMPRODUCT(N(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE)))
我正在为一个数组公式苦苦挣扎,这在逻辑上似乎是合理的,但它似乎无法正常工作。我一直在研究一个复杂的 sheet,它不包括 VBA,这使得它的公式很重,而是使用数组。
在下图中,第一部分是问题所在,对于 A-F 列中显示的数据,我希望得到与 I1:K1 中的值匹配的值的总和。
我开始使用的公式也可以在第一张图片中看到,这会计算,按 F9,给我所需的输出 20,40 和 50。但是当我添加 SUM
围绕公式,我只得到第一个结果。
我认为这是一个问题,因为我在这个问题上看不到树木。
提前致谢。
这个数组公式似乎有效:
=SUM((IFERROR(MATCH(A1:F1,I1:K1,0),0)>0)*A2:F2)
可能有多个更好的公式可以实现相同的目的。
但是要说说为什么会失败:
这是因为 OFFSET function returns 是一个引用而不是一个值。因此在这个数组公式中使用它 returns 引用数组 {B2,D2,E2}
而不是导致问题的值数组 {20,40,50}
。
如果您正在使用:
=SUMPRODUCT(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1))
然后使用计算公式,您将得到:
SUMPRODUCT({#VALUE,#VALUE,#VALUE})
在最后一步的旁边,结果为 0。所以 OFFSET
导致错误值,因为它 returns 一个引用数组,不会自动取消引用,因此每个引用都会变成 #VALUE
错误。
如果您正在使用
=SUMPRODUCT(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))
然后它工作 returns 110。所以 N
取消引用每个 OFFSET
的引用,所以整个公式导致值数组 {20,40,50}
在总和
{=SUM(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))}
也有效。
这些问题是在数组公式中使用 OFFSET
和 INDIRECT
等函数时出现的,其中 returns 引用而不是值。并且在 OFFSET
或 INDIRECT
周围有一个取消引用函数可以解决问题。
同理:
=SUMPRODUCT(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE))
对比
=SUMPRODUCT(N(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE)))