Excel动态公式与SUMPRODUCT和OFFSET

问题描述 投票:0回答:1

我的 Excel 中有 3 列:

  • P 列是从 1 到 11 开始的数字范围,然后是从 1 到 14 等等,它的行数永远不会相同
  • W 列的数字取决于 P 列
  • AK 列的数字取决于 P 列

问题是我使用的公式并没有对 P 列的整个范围求和 - 意味着从 1 到 11 的整个集合,接下来的 1 到 14,依此类推。

这是我正在使用的公式:

=+SUMPRODUCT(OFFSET(W2;0;0;MATCH(1;P:P;0));OFFSET(AK2;0;0;MATCH(1;P:P;0)))/AK2, and the MATCH part always returns 2, meaning it takes just the 2 numbers not the entire range from 1 to 11, then 1 to 14.

P 列是一种颜色,然后是 W 列和 AK 列,需要求和。这个想法是,它需要从 1 到 11,然后从 1 到 14 进行求和,并且范围随着从 1 前进到 11 而始终减小,并且在 11 处只是一个输入。

excel-formula dynamic range offset sumproduct
1个回答
0
投票

我认为这就是你想要计算的:

=+SUMPRODUCT(OFFSET(W2,0,0,IFERROR(MATCH(1,(P:P=1)*(ROW(P:P)>ROW()),0),1+LOOKUP(2,1/P:P,ROW(P:P)))-ROW()),OFFSET(AK2,0,0,IFERROR(MATCH(1,(P:P=1)*(ROW(P:P)>ROW()),0),1+LOOKUP(2,1/P:P,ROW(P:P)))-ROW()))/AK2

公式的

MATCH(1;P:P;0)
部分将从第 1 行开始搜索值
1
并且始终会在第二行(第一次出现)中找到它,因此我们需要声明查找行号为的第一个 1大于当前。因为这将导致最后一个序列出现错误,该序列没有
1
来查找每个值后面的任何位置。因此,我们使用 iferror 返回最后一行号。

但是上述方法有效,我不建议使用它。 OFFSET 是一个易失性函数,会在工作簿中任何地方发生任何更改时重新计算。 这会导致文件变慢,这很烦人。因此使用 INDEX 而不是 OFFSET:

=SUMPRODUCT(W2:INDEX(W:W,IFERROR(MATCH(1,(P:P=1)*(ROW(P:P)>ROW()),0)-1,LOOKUP(2,1/P:P,ROW(P:P)))),AK2:INDEX(AK:AK,IFERROR(MATCH(1,(P:P=1)*(ROW(P:P)>ROW()),0)-1,LOOKUP(2,1/P:P,ROW(P:P)))))/AK2

(将冒号替换为分号:)

=SUMPRODUCT(W2:INDEX(W:W;IFERROR(MATCH(1;(P:P=1)*(ROW(P:P)>ROW());0)-1;LOOKUP(2;1/P:P;ROW(P:P))));AK2:INDEX(AK:AK;IFERROR(MATCH(1;(P:P=1)*(ROW(P:P)>ROW());0)-1;LOOKUP(2;1/P:P;ROW(P:P)))))/AK2

PS,如果您有 Office 365,这可以改进,请告诉我们。

© www.soinside.com 2019 - 2024. All rights reserved.