从具有供应水平的表中计算供应的最佳方法?

时间:2015-06-04 14:55:08

标签: excel

我有一个提供级别的表。

Sales   Provision
0       5%
20 000  22%
100 000 30%

一个推销员在前20,000个中有5%的拨备,在接下来的8万个中有22%,在上面的所有内容上有30%。

例如,售价为230 000的推销员将有提供

=20 000 * 0,05 + 80 000 * 0,22 + 130 000 * 0,30

如何用公式有效地表达这一点?公式

  • 需要轻松复制到多行(每行描述推销员)
  • 即使我添加更多提供级别,也需要工作

1 个答案:

答案 0 :(得分:1)

我可以说这对于要求#2有用(希望如此):

  

即使我添加更多的提供级别,也需要工作

但请注意,我不确定要求#1:

  

需要很容易复制到多行(每行描述一个推销员)

无论如何,有了这些数据:

   A     B      C           D          E
------------------------------------------
0       0.05        Value           230000
20000   0.22        Total Provision  57600
100000  0.3 

我在E2中使用了这个公式:

=IFERROR(SUMPRODUCT((INDIRECT("A2:A"&MATCH(E1,A:A,1))-INDIRECT("A1:A"&MATCH(E1,A:A,1)-1))*INDIRECT("B1:B"&MATCH(E1,A:A,1)-1))+(E1-INDEX(A:A,MATCH(E1,A:A,1)))*INDEX(B:B,MATCH(E1,A:A,1)),E1*B1)

如果我们打破这个公式:

第一个基本步骤是找到销售价值所在的指数。这是与销售价值相比的第一个较低价值。在您的示例数据中,这是直截了当的,因为索引是提供列表中的最后一个。但是,为了适应列表范围内的销售价值,我们可以使用:

MATCH(E1,A:A,1)

其中E1是销售价值,A:A是销售提供清单。

使用此功能,我们可以合并INDIRECT以获得我们需要使用的所需范围。在这种情况下A1 to A & Index

INDIRECT("A1:A"&MATCH(E1,A:A,1))

但即使在这个范围内,我们也需要找出两个不同的值:

  • 供应价值指数低于我们的销售价值(即20 000 * 0.05 + 80 000 * 0.22
  • 提供销售价值的其余部分(即130 000 * 0.30

所以要获得第一个值,我们需要设置一个这样的数组:

(20000   -     0) * 0.05  =  20000*.05 =  1000
(100000  - 20000) * 0.22  =  80000*.22 = 17600
                                   SUM = 18600

可以使用

完成
(A2:A3 - A1:A2)*(B1:B2)

但是要把它放在我们的INDIRECT公式中,那就像

INDIRECT("A2:A"&MATCH(E1,A:A,1))     <- A2:A3
INDIRECT("A1:A"&MATCH(E1,A:A,1)-1)   <- A1:A2
INDIRECT("B1:B"&MATCH(E1,A:A,1)-1)   <- B1:B2

(INDIRECT("A2:A"&MATCH(E1,A:A,1))-INDIRECT("A1:A"&MATCH(E1,A:A,1)-1))*INDIRECT("B1:B"&MATCH(E1,A:A,1)-1))

SUMPRODUCT围绕它来获得总数:

SUMPRODUCT((INDIRECT("A2:A"&MATCH(E1,A:A,1))-INDIRECT("A1:A"&MATCH(E1,A:A,1)-1))*INDIRECT("B1:B"&MATCH(E1,A:A,1)-1))

然后第二个值就是我们的指数值减去总销售额并乘以相应的拨备率。那就是:

(E1-A3)*B3

我们实际上并不需要INDIRECT,只有INDEX - MATCHE1 <- E1 INDEX(A:A,MATCH(E1,A:A,1)) <- A3 INDEX(B:B,MATCH(E1,A:A,1)) <- B3 (E1-INDEX(A:A,MATCH(E1,A:A,1)))*INDEX(B:B,MATCH(E1,A:A,1)) 次查找:

IFERROR

然后将这些添加到公式中,得到我之前显示的派生公式。

然而,最后添加的是添加INDEX-MATCH包装器,因为如果该值小于第一个非零配置,则INDIRECTE1*B1 将失败。因此,如果出现错误,则意味着我们只需要将销售价值乘以第一个提供率:

   A     B      C          D          E
------------------------------------------
0       0.05        Value           230000
20000   0.22        Total Provision  63600
100000  0.30
200000  0.50

当然,如果你添加一个额外的供应行:

   A     B      C          D          E
------------------------------------------
0       0.05        Value            22000
20000   0.22        Total Provision   1440
100000  0.30

或更改条款:

=IFERROR(SUMPRODUCT((INDIRECT("A2:A"&MATCH(E1;A:A;1))-INDIRECT("A1:A"&MATCH(E1;A:A;1)-1))*INDIRECT("B1:B"&MATCH(E1;A:A;1)-1))+(E1-INDEX(A:A;MATCH(E1;A:A;1)))*INDEX(B:B;MATCH(E1;A:A;1));E1*B1)

该公式将索引到适当的规定并正确计算。

此外,

因为我知道我在我的语言环境中使用逗号和小数,我意识到你不是这里的分号列表分隔符的公式:

if (myWindow.closed) {
     delete window.myWindow;
}