如何从动态命名范围偏移并在 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"))
情况:
尝试将动态命名范围的 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"))