【问题标题】:Excel array formula to multi dimensional intermediate arraysExcel数组公式到多维中间数组
【发布时间】:2020-05-26 23:56:10
【问题描述】:

我有以下数据

我想要实现的是这些中间数组

即对于 JohnProject,有两个条目 A 和 C。对于项目 A,第二个表中有两个标签 10 和 6,对于项目 C,有三个标签 22、9、7。我想在更大的数组公式中将它们作为中间数组。

带数组公式

=UNIQUE(IF({"D"}=D2:D9,ROW(D2:D9)))

我可以为 JuliaProject D 和 4,8 获得更接近的结果,但对于任何其他有两个项目的人来说,它不起作用。

=UNIQUE(IF({"A","C"}=D2:D9,ROW(D2:D9)))

我希望在表格中获得中间结果,以便在其他数组公式中使用数组。

编辑:我的问题的复杂版本。

好的,更大的问题。解释起来有点复杂。但我可以试试。我有一个映射表、真值表和输入数据。我想看看输入数据是否可以使用真值表和映射表进行映射。所以它有点像我想在最后实现的映射。映射表本身是多对多的,一个项目可以有多个标签,一个标签可以关联多个项目,但里面没有Person。纯粹的项目和标签。真值表有 Person 和 Projects 但没有标签。我想从唯一的人映射到标签。我可以轻松获取与一个人关联的所有项目(在数组公式中作为中间数组),现在对于我在数组中获得的每个项目,我想找出所有标签并将它们合并到一个数组中。问题在于映射表中的多对多关系,因为它返回多维数组而不是一维。我想获得一个数组(数组公式的中间值)来最终搜索声明的标签是否在该列表中。我希望这是有道理的。

【问题讨论】:

  • 这可能是XY Problem。也许如果您指明最终结果是您想要做什么,就可以制定出更好的解决方案。

标签: excel excel-formula array-formulas


【解决方案1】:

以下数组公式可用于将 USER 与 TAG 连接起来:

{=AGGREGATE(15,6,INDEX($E$2:$E$9,N(IF(MMULT(--IFERROR(TRANSPOSE(INDEX($B$2:$B$6,N(IF($G2=$A$2:$A$6,ROW($B$2:$B$6)))-1))=$D$2:$D$9,FALSE),ROW($B$2:$B$6)^0),ROW($D$2:$D$9)))-1),COLUMNS($G$2:G2))}

我不知道接下来会在哪里使用该公式,但为了显示结果,我将其放入AGGREGATE 函数中。如果没有AGGREGATE,则返回包含错误值的数组。

“清洁”公式:

{=INDEX($E$2:$E$9,N(IF(MMULT(--IFERROR(TRANSPOSE(INDEX($B$2:$B$6,N(IF($G2=$A$2:$A$6,ROW($B$2:$B$6)))-1))=$D$2:$D$9,FALSE),ROW($B$2:$B$6)^0),ROW($D$2:$D$9)))-1)}

【讨论】:

    【解决方案2】:

    以下公式将显示“没有错误值的数组结果”,方法是使用击键F9 在公式栏中点击突出显示的公式

    1] "Project" 数组结果,在H2 公式中复制下来:

    =INDEX(B$2:B$6,N(IF(1,AGGREGATE(15,6,ROW(B$1:B$5)/($A$2:$A$6=G2),ROW(INDIRECT("1:"&COUNTIF(A$2:A$6,G2)))))))
    

    2] "Tag" 数组结果,在I2 公式中复制下来:

    =INDEX(E$2:E$9,N(IF(1,AGGREGATE(15,6,ROW(E$1:E$8)/ISNUMBER(MATCH(D$2:D$9,IF(A$2:A$6=G2,B$2:B$6),0)),ROW(INDIRECT("1:"&COUNT(MATCH(D$2:D$9,IF(A$2:A$6=G2,B$2:B$6),0))))))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多