我正在尝试在一个有几千行的电子表格中创建一个公式。我正在努力寻找能够找出父母( x )有多少孩子( y )的部分 - 计算价值直到价值变化。
我尝试过使用=IF(A2=OFFSET(A2,-1,0),OFFSET(B2,-1,0)+1,1)
,目前只计算儿童用品
最终目标是根据计数输出所有儿童的价值。
+---+------+-------+-------+--------------+--+
| 1 | Type | Count | Value | Child Values | |
+---+------+-------+-------+--------------+--+
| 2 | x | 1 | A | B | |
| 3 | y | | B | | |
| 4 | x | 2 | C | D,E | |
| 5 | y | | D | | |
| 6 | y | | E | | |
| 7 | x | 1 | F | G | |
| 8 | y | | G | | |
+---+------+-------+-------+--------------+--+
因此,如果 x 有2个子节点,则公式将输出其旁边的下2个单元格的值(子值)。父母最多可以有8个孩子,并且需要根据计数获取一些下一个单元格值 如果没有Excel VBA,这第二部分是否可行?感谢您的帮助!
答案 0 :(得分:1)
这可能不是最好的答案,但确实避免了VBA。您必须在列表底部有一个没有子项的虚拟 x 。
您的计数公式为:
=IF(A2="y","",MATCH("x",INDEX($A:$A,ROW()+1):INDEX($A:$A,COUNTA($A:$A)),0)-1)
INDEX($A:$A,ROW()+1):INDEX($A:$A,COUNTA($A:$A)
会设置从下一行到列表末尾的引用,前提是列A
中每个单元格中的A1
到列表末尾都有一个值。 MATCH("x",....,0)
将返回下一个 x 所在的引用范围中的行号。从中减去一个将给出 x 的子项数。 IF(A2="y","",.......)
确保计数仅显示在 x 行上。 由于您最多只有8个孩子,因此您可以使用此公式返回子值。
=IF(B2="","",CONCATENATE(IF(B2>=1,C3,""),IF(B2>=2," ," & C4,""),IF(B2>=3," ," & C5,""),IF(B2>=4," ," & C6,""),IF(B2>=5," ," & C7,""),IF(B2>=6," ," & C8,""),IF(B2>=7," ," & C9,""),IF(B2>=8," ," & C10,"")))