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

时间:2018-02-26 09:16:48

标签: excel dynamic excel-formula offset named-ranges

情况:

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

设定:

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

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

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

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

如图所示:

Named range

注意: textRange将获取所有必需的行。可以假设从连续填充的范围中拉出,即textRange覆盖了所需的所有行。

目的:

我现在希望Offset使用Column函数来B2:B4获取相同的行1列,即OFFSET(A2,0,COLUMN(B1)-1,COUNTA(textRange),1) ;如果A列中的相应文本以“A”结尾,则对该范围内的值求和。

预期结果为3.

过程:

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

Column

偏移范围可以是A之后的任何列,因此我使用=SUMPRODUCT(OFFSET(A2,0,COLUMN(B1)-1,COUNTA(textRange),1),--(RIGHT(textRange,1)="A")) 函数可以将公式拖动到返回感兴趣的范围。

2)然后我将此偏移量范围传递给SUMPRODUCT,如果相应的A列行的最后一个字母为“A”,则将其值相加,即

3

结果:

预期结果为#Value!,但目前为make --version

问题:

我做错了什么?我猜这是因为我如何通过范围。

请求解决方案:

我对任何其他实现相同结果的方式持开放态度。但是,当跨列拖动时,公式必须更新动态范围的偏移量,并且必须对新的行集执行条件求和。

参考:

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

1 个答案:

答案 0 :(得分:3)

#Value!错误似乎来自于列(B1)生成单单元格数组的事实,如果您使用评估公式跟踪它,您可以看到它

enter image description here

这肯定是一个奇怪的,但我猜测OFFSET会尝试返回一个范围数组,只能通过几个函数来处理 - N(),SUBTOTAL和INDEX。

您可以通过像这样对数组求和来修复它

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