大家晚上好
我在“A”和“B”列中有一个表格。 它称为 BOM(物料清单),“A”列是“B”列的父级,“B”列是子级。 有些代码有一个子代码,也可能有一个子代码等等,但它们并不总是具有相同数量的级别。 在我的示例中,表 A001 有两个子项“A005”和“A006”,每个子项都有自己的 MCode 子项。 但是,A002 没有任何子 ACode,只有子“M002”。
我尝试了各种循环将“A”和“B”列中的表格转换为“D”到“G”列中的表格,但是子级转到的动态级别意味着我无法让它工作。 一些调查表明有一个递归函数,但尽管进行了各种尝试,但仍无法实现。
感谢任何支持(不担心“D”到“G”列中的格式,但将其放入以帮助理解)。 如果您有任何问题需要帮助理解我的请求,我很乐意回答其中任何一个问题。
非常感谢,艾伦。
感谢有趣的挑战(爱递归:)
Excel 中的递归有一些限制,但这可能适合您的需求。
请在名称管理器中定义一个命名公式(
all_my_children
)(我们需要将其用于递归公式),在示例中我为名为Tree
的数据创建了一个表。
all_my_children=
=LAMBDA(p, DROP(REDUCE("r", p, LAMBDA(acc,cur, LET(c, FILTER(Tree[Child], Tree[Parent] = cur), VSTACK(acc, IF(AND(ISERROR(c)), cur, HSTACK(cur, VSTACK(all_my_children(c)))))))), 1))
=LAMBDA(p,
DROP(
REDUCE(
"r",
p,
LAMBDA(acc, cur,
LET(
c, FILTER(Tree[Child], Tree[Parent] = cur),
VSTACK(
acc,
IF(AND(ISERROR(c)), cur, HSTACK(cur, VSTACK(all_my_children(c))))
)
)
)
),
1
)
)
然后得到结果,(在示例中输入
E1
):
=LET(
first_level, UNIQUE(
FILTER(Tree[Parent], MAP(Tree[Parent], LAMBDA(a_, AND(a_ <> Tree[Child]))))
),
result, IFNA(all_my_children(first_level), ""),
VSTACK("Level " & SEQUENCE(, COLUMNS(result)), result)
)