Excel,带有变量循环的while循环

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

大家晚上好

我在“A”和“B”列中有一个表格。 它称为 BOM(物料清单),“A”列是“B”列的父级,“B”列是子级。 有些代码有一个子代码,也可能有一个子代码等等,但它们并不总是具有相同数量的级别。 在我的示例中,表 A001 有两个子项“A005”和“A006”,每个子项都有自己的 MCode 子项。 但是,A002 没有任何子 ACode,只有子“M002”。

enter image description here

我尝试了各种循环将“A”和“B”列中的表格转换为“D”到“G”列中的表格,但是子级转到的动态级别意味着我无法让它工作。 一些调查表明有一个递归函数,但尽管进行了各种尝试,但仍无法实现。

感谢任何支持(不担心“D”到“G”列中的格式,但将其放入以帮助理解)。 如果您有任何问题需要帮助理解我的请求,我很乐意回答其中任何一个问题。

非常感谢,艾伦。

excel vba excel-formula
1个回答
0
投票

感谢有趣的挑战(爱递归:)

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)
)

如果需要任何解释,请告知。 Formula and result

© www.soinside.com 2019 - 2024. All rights reserved.