【问题标题】:How to construct a lookup loop in Excel (without using VBA)?如何在 Excel 中构建查找循环(​​不使用 VBA)?
【发布时间】:2021-04-20 15:08:11
【问题描述】:

我在 Excel 工作表中有数据,遵循以下模式:

如您所见,每个员工都有一个经理,他自己就是员工。有员工向一名员工汇报,而一名员工向另一名员工汇报(例如,H 向 D 汇报,D 向 B 汇报,B 又向 E 汇报,向 Z 汇报。

我正在寻找的是一种方法,我可以找到某个特定人员“下属”的所有员工。例如,如果我用 E 提供公式,那么它应该找到向 E 报告的员工(A、B 和 I)、向 A/B/I 报告的员工(C、D)、向 C 报告的员工/D (H)。

我对自己的 excel 技能不太自信,只使用了基本的 VLOOKUP,但未能想出在查找中进行此类查找的方法。

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    在 Microsoft365 中,我使用了以下内容:

    D2中的公式:

    =TRANSPOSE(FILTER(A$2:A$12,IFERROR(MMULT(--(B$2:B$12=D1#),SEQUENCE(COUNTA(D1#),,,0)),B$2:B$12=D1),""))
    

    向下拖动直到碰到空单元格。

    【讨论】:

    • H 向 D 汇报,为什么在 C 下?
    • C 下不存在。只是那些向他们上方的任何人报告的人@Jayachandran
    • 感谢您的回复。赞成。如果此解决方案适用于 Excel 2013,我将接受。
    • @Jayachandran,不会的。这是一个 Microsoft365 解决方案。我建议将您的 Excel 版本添加到您的标签中以指定这一点。
    【解决方案2】:

    在 E2 中,将数组公式 (Ctrl+Shift+Enter) 复制到 G2 的右侧:

    =TEXTJOIN(", ",,IF(ISNUMBER(SEARCH($B2:$B12,D2)),$A2:$A12,""))

    【讨论】:

      【解决方案3】:

      对于Excel2013,您可以使用AGGREGATE() 函数。根据我下面的屏幕截图使用公式

      D2=IFERROR(INDEX($A$2:$A$12,AGGREGATE(15,6,ROW($1:$12)/($B$2:$B$12=$D$1),ROW(1:1))),"")
      E2=IFERROR(INDEX($A$2:$A$12,AGGREGATE(15,6,ROW($1:$12)/($B$2:$B$12=D2),ROW($1:$1))),"")
      

      根据需要向下复制。如果您想在同一单元格中显示值并用逗号分隔,那么您需要为Excel2013 使用TEXTJOIN() 自定义函数,因为Excel2013 上没有Textjoin。这是来自@Scott Craner 的TEXTJOIN() 的链接

      TextJoin UDF For Excel 2013

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 2016-12-10
        • 1970-01-01
        • 2014-03-07
        • 2011-06-24
        • 2020-02-10
        • 2020-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多