Excel公式只要求和

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

我正在尝试找到一个公式来计算列的余额,直到找到负值。找到负值后,必须再次计算余额,直到下一个负值。基本上跟踪你花费的东西,除了它只在你卖东西时显示一个值。任何人都知道如果可以在MS excel中做到这一点吗?谢谢!

excel excel-formula
4个回答
0
投票

好。现在我得到你的问题。我认为以下内容可以解决问题。结果与您的示例完全匹配。

// In these cells only
F2: =MAX(0,B2*C2)
G2: =MAX(0,B2)+MIN(0,B2)

// In these cells, then copy down
E3: =IF(B3<0,D3-(F2-F3),"")
F3: =F2+MAX(0,B3*C3)+IF(G2=0,0,MIN(0,B3*F2/G2))
G3: =G2+MAX(0,B3)+MIN(0,B3)

我会注意到以下几点:

1)您可以考虑将列的名称更改为trans,quan,$ per,$ ttl,$ gp,并命名我添加$ inv和inv的2列。 2)这是使用库存的平均成本,每次交易重新计算,而不是LIFO或FIFO。 3)如果条目失序使得quan变为负数,我认为这个解决方案将失败。无论如何,这可能是您想要注意的错误。 4)仅供参考,当IF(库存)为0时,F3中的“IF(G2 = 0”部分仅用于避免除以0错误。当然,我可以通过其他方式完成。它可以工作。 5)我假设您不能以未购买的方式出售,因此我将E2留空了。


0
投票

一种方法是添加2个额外的列,可以隐藏或在另一个工作表上,然后(这里假设添加了在右侧添加的列F2和G2):

In Cell E2: =IF(B2<0,G2,"")  
In Cell F2: =B2*C2  
In Cell G2: =SUM(F$2:F2)

复制这些,假设我正确理解你的问题,你会得到你想要的结果。


0
投票

你得到的最大问题是计算范围以检查平衡计算。如果您的表格中的下一行是“卖出”而您仍然从上一次购买中剩下一个“苹果”,则此功能无效。如果你想做更复杂的事情,你应该使用VBA。

其他人可能会有更简单的方法来计算范围;我是以一种相当复杂的方式做到的,没有时间来优化它们。

在F列中有一个数组公式,用于计算与'sell'相关的'buy'范围内的最后一行。

=IF($B2>=0,"",LARGE(IF($B$2:$B2>0,ROW($A$2:$A2)),1))

在G列中,有一个常规公式来捕获范围中第一行的行号。

=IF(ROW()=2,ROW(),IF(B2>0,IF(B1<0,ROW(),""),""))

在H列中,使用数组公式将其转换为存储在相关的“sell”行中:

=IF($B2>=0,"",LARGE(IF($G$2:$G2>0,$G$2:G2),1))

在E列中,使用INDIRECT语句中的这些计算行范围引用来计算余额。

=IF(B2>0,"",(C2*-(B2))-(-(B2)*(SUMPRODUCT(INDIRECT("B"&H2&":B"&F2),INDIRECT("C"&H2&":C"&F2)/SUM(INDIRECT("B"&H2&":B"&F2))))))

请注意,INDIRECT使用字符串来引用单元格和范围,如果移动单元格或范围,则必须手动更改INDIRECT字符串以引用正确的单元格。


0
投票

回应@carol,并再次查看问答,特别是在你说“虽然问题出现之后,因为它需要忽略José之前的余额并从后续的新的开始,”我意识到你可能希望显示自上次销售以来所有销售收据和购买的余额。如果是这样:

In Cell G2: =F2

不要复制上面的内容。请复制下面的内容。

In Cell E2: =IF(B2<0,G2,"")  
In Cell F2: =B2*C2  
In Cell G3: =IF(B2<0,F3,F3+G2)
© www.soinside.com 2019 - 2024. All rights reserved.