我试图解决一个琐碎的数学问题,但没有成功。最终产品应该是一个漂亮干净的Excel公式。
我们在这里考虑每月在办公室喝杯咖啡。桌子上的每个停靠点都与前面相距200杯。 (即标题每个月读200、400、600等杯)。对于这些停靠点,我都计算了与我们考虑的消费水平相关的包装成本。
问题是当我们考虑中间消耗值时,例如720杯/月。这介于表的2列之间。 720比800更接近800。因此,我要寻找的公式将类似于:
w *(与600杯/月相关的包装成本)+ w'*(与800杯/月相关的包装成本)
其中:w(在我们的示例中为w = 200-120 / 200),而w’= 1-w
如果没有一系列“如果”,就无法优雅地做到这一点……您会怎么做?
答案 0 :(得分:0)
要将A1
向下舍入到最接近的乘积200,可以使用以下方法:
=ROUNDDOWN(A1 / 200, 0) * 200
类似地,您可以使用ROUNDUP
。
然后,为了计算您的w
,您可以使用以下公式:
= 200 - (A1 - ROUNDDOWN(A1 / 200, 0) * 200) / 200
然后您VLOOKUP
便无法通过价格表中的位置查找相关价格。
答案 1 :(得分:0)
如何?
单元格D4中的公式
=VLOOKUP(D2,A2:B7,2,1)+((VLOOKUP(D2+200,A2:B7,2,1)-VLOOKUP(D2,A2:B7,2,1))/200)*(D2-VLOOKUP(D2,A2:B7,1,1))
因此,一个插值公式将价格取为最接近的最低值,并增加了额外的必要金额...
答案 2 :(得分:0)
编辑#2
假定您遵循以下命名范围:
200
增量单位。基于以下假设:
Weighted Average Price (WAP) = w * p + w' * p'
根据我的示例中上面提供的价格表,
如果消耗量为
720
w =(200-120)/ 200 = 0.4
w' = 1-w = 0.6
p = 80是数量
的成本600
p' = 100是数量
的成本800
WAP = 0.4 * 80 + 0.6 * 100 = 92
鉴于价格方程的结构,可以使用 SUMPRODUCT 函数将其重写如下:
WAP = SUMPRODUCT({w,w'},{p,p'})
要从上述公式中找到数量权重{w,w'}
的范围,可以使用以下数组公式,需要通过按 Ctrl +进行确认 Shift + 输入:
{=ABS({0,1}-(Bound-MOD(Consumed,Bound))/Bound)}
此处 MOD 函数用于找出
600
以上的120
上的剩余数量。从{0,1}
减去后将返回{-0.4,0.6}
,然后使用 ABS 函数将所有值都变为正数。
要找到价格范围{p,p'}
,可以使用另一个数组公式,也需要使用 Ctrl + Shift + 输入:
{=INDEX(Costs,N(IF(1,MATCH(MROUND(Consumed,Bound),Consumption,0)-IF(MOD(Consumed,Bound)<100,{0,0},{1,0}))))}
在这里,我使用了@JvdV建议的 MROUND 函数来找到最接近的界限,然后使用 INDEX + MATCH 返回相应的价格。 IF 函数将返回
{0,0}
或{1,0}
,这将确定查找价格是来自两个边界还是来自同一边界,这取决于所消耗的数量接近上限或下限。
最后,在 SUMPRODUCT 函数中将以上两个数组公式组合在一起,如下所示:
{=SUMPRODUCT(ABS({0,1}-(Bound-MOD(Consumed,Bound))/Bound)*INDEX(Costs,N(IF(1,MATCH(MROUND(Consumed,Bound),Consumption,0)-IF(MOD(Consumed,Bound)<100,{0,0},{1,0})))))}
这也是一个数组公式,需要在以下位置按 Ctrl + Shift + Enter 进行确认公式栏。
如果我根据第一个假设将消费数量更改为650
,则价格应为80
,如下所示:
答案 3 :(得分:0)
对不起,您的回复很晚。已经有一段时间了。我需要仔细阅读/测试您的建议,但在此之前,感谢您在此问题上的帮助。你真的很摇滚;)
朱利安