我的问题是:我不知道我应该利用excel function(s)
来实现我的目标,而不是宏。
我的目标:如下图所示,我有一棵树或BoM(Bill of Meterial)结构。如果一个单元格有子代,那么我需要计算父单元格的正确值。
在图像中,黄色bg函数表示如果单元格中有子项,则应使用子项的值计算值。
这份文件将是一份活文件,随着项目的进展而更新,所以我知道最多可能的孩子,但我不知道在项目结束时我将使用多少。
例如: D3(最初有2个孩子)1年后可能有5个孩子,4年后可能有8个孩子,项目结束时可能有13个孩子。但不能超过最大值(让我们说25)
我需要一个结构,在构造完所有公式模板之后,如果我添加一个新行作为D3的子级,那么excel必须再次使用新孩子和旧孩子
例如: 方法:求和子值 原来: D3 = D4 + D5
一段时间后,一个新的孩子加入了D6, D3 = D4 + D5 + D6我不应该进行手动设置。我真正的excel将拥有数千个值和统计复杂的计算
答案 0 :(得分:1)
好的,好的,你可以:
在第F
栏中添加以下内容(第3行):
(确定哪些是父母,哪个是最后一个孩子)
=IF(C3<>C4,IF(C3=1,"Parent","End of Children"),"")
在第G
栏中添加以下内容(第3行):
(查找最后一个孩子的下一次出现)
=IF(F3="Parent", MATCH("End of Children",F4:F901, 0),"")
在第E
栏中添加以下内容(第3行):
(根据下次出现的最后一个孩子计算函数)
IF(F3="Parent",SUM(INDIRECT("D"&ROW(D3)+1&":D"&ROW(D3)+G3)),"")
现在,在数据集中向上和向下拖动E3
,F3
,G3
中的值。
列E
将包含您的值。
希望这是一个开始。
答案 1 :(得分:0)
我尝试了ForkandBeard的答案,当每个父母至少有一个孩子时,它都有效。如果情况并非总是如此,则公式可以概括如下:
=IF(C3=1,"Parent",If(C3<>C4,"End of Children"),"").
=IF(F3="Parent", IF(C4<>"Parent",MATCH("End of Children",F4:F901,0),""),"")
=IF(F3="Parent",SUM(INDIRECT("D"&ROW(D3)+1&":D"&ROW(D3)+G3)),"")