情况:
我在尝试将动态命名范围的#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)
如图所示:
注意: 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/
答案 0 :(得分:3)
#Value!错误似乎来自于列(B1)生成单单元格数组的事实,如果您使用评估公式跟踪它,您可以看到它
这肯定是一个奇怪的,但我猜测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"))