Excel 数组函数 return 找到具有索引和匹配的所有字段

Excel array function return all fields found with index and match

这是我使用的数组函数:

=IFERROR(INDEX('Master Data'!$D:$D3,MATCH(1,(B9='Master Data'!$J:$J3)*('Master Data'!$W:$W3=1),FALSE)),"")

其中 D 是一个项目的名称,J 是一个人的名字,W 是一个标志,用于检查他们是否被分配给一个等于 0 或 1 的项目。B 也是一个人名的实例由单独的列表构建。

它基本上引用主数据和 returns 具有指定条件的任何行。然而,一个人可能有两个实例,其中分配的标志等于 1,因此随着主数据被过滤,函数返回不同的结果。

我遇到的另一个问题是人名也没有重复,所以也许最好的方法是从主数据开始填充分配的 table 中的名字。

这里要求的是数据的一个小例子。左边是主数据,中间是分配的 table 正在构建的,右边是在分配的 table.

中建立名称的员工列表

请注意,主数据中有两个 david smith 的实例,但分配的 table 中只有一个,因为它是用员工列表构建的。

我的想法是使用分配指标等于 1 的数组从主数据中建立分配的 table 中的名称,并完全废弃员工列表,但我真的不确定这是否可能或如何去做。

或者即使有某种方法可以select主数据中指定指标 = 1 的几列?

不确定我是否理解正确。但是如何列出多个查找结果的问题可以通过 SMALL 函数结合获取 ROW 数字数组来实现。

例如有一个 sheet 这样的:

则公式为:

F4向下:

=COUNTIFS($B:$B,$E4,$C:$C,1)

G4 然后复制到G4:J8:

{=INDEX($A:$A00,SMALL(IF($B:$B00=$E4,IF($C:$C00=1,ROW(:00))),COLUMN(A:A)))}

但如果目标只是获得所有已分配资源的筛选列表,则公式可以是

E13:

{=INDEX($B:$B00,MATCH(1,($C:$C00=1)*1,0))}

E14向下:

{=INDEX($B:$B00,MATCH(1,(COUNTIF($E:$E13,$B:$B00)=0)*($C:$C00=1),0))}

{}中的公式为数组公式。这些在没有大括号的情况下输入到单元格中,然后按 [Ctrl]+[Shift]+[Enter] 完成。

为了更好地理解公式,我没有处理错误值。您可以稍后使用 IFERROR 隐藏错误值。你似乎知道如何做到这一点。