如何从动态命名范围偏移并在 SUMPRODUCT 中使用该范围?

How to OFFSET from a dynamic named range and use that range in SUMPRODUCT?

情况:

尝试将动态命名范围的 OFFSET 传递给 SUMPRODUCT 时,我得到 #Value!

设置:

我在 Sheet1 的 A2:B4 范围内有以下数据。

| TextA | 1 |
|-------|---|
| TextA | 2 |
|-------|---|
| TextB | 3 |

我使用公式为 A 列中的值创建了一个动态命名范围 textRange

=OFFSET(Sheet1!$A,0,0,COUNTA(Sheet1!$A:$A48576),1)

如图:

注意: textRange 将选取所有需要的行。可以假设它是从一个连续填充的范围中提取的,即 textRange 涵盖了所有需要的行。

目标:

我现在想 Offset 使用 Column 函数从中获取相同的行 1 列,即 B2:B4;如果 A 列中的相应文本以 "A" 结尾,则对该范围内的值求和。

预期结果为 3。

进程:

1) 我正在使用以下公式来构造偏移范围:

OFFSET(A2,0,COLUMN(B1)-1,COUNTA(textRange),1)

偏移范围可以是 A 之后的任何列,因此我使用 Column 函数可以将公式拖到 return 感兴趣的范围。

2) 然后我将这个 Offset 范围传递给 SUMPRODUCT,如果相应的 A 列的最后一个字母为 "A" 即

=SUMPRODUCT(OFFSET(A2,0,COLUMN(B1)-1,COUNTA(textRange),1),--(RIGHT(textRange,1)="A"))

结果:

预期结果为 3,但目前为 #Value!

问题:

我做错了什么?我猜这是因为我超出范围的方式。

请求的解决方案:

我愿意接受任何其他实现相同结果的方法。但是,当跨列拖动时,公式必须更新动态范围的偏移量,并且必须对新的一组行执行条件求和。

参考:

https://chandoo.org/forum/threads/using-offset-function-with-sumproduct.960/

#Value!错误似乎来自 Column(B1) 生成一个 single-cell 数组这一事实,如您所见,如果您使用 Evaluate Formula

追踪它

这当然很奇怪,但我猜测 OFFSET 然后会尝试 return 范围数组,这只能由几个函数处理 - N()、SUBTOTAL 和 INDEX。

你可以通过SUM-ing这样的数组来修复它

=SUMPRODUCT(OFFSET($A2,0,SUM(COLUMN(B1)-1),COUNTA(TextRange),1),--(RIGHT(TextRange,1)="A"))

或将 OFFSET 包装在 INDEX

=SUMPRODUCT(INDEX(OFFSET($A2,0,COLUMN(B1)-1,COUNTA(TextRange),1),0,1),--(RIGHT(TextRange,1)="A"))