水平索引匹配:查找矩阵中的文本和 Return Header

Horizontal Index Match: Find Text In A Matrix And Return The Header

我有一份名单。我还有一个矩阵,其中包含名称及其对应的审计员作为列标题。我需要在此矩阵中查找名称,找到名称后,我需要获取作为列标题的审核员。我有一个垂直工作的代码,但我找不到使其水平工作的公式。

这是我的垂直矩阵工作代码:

=IFERROR(INDEX(auditors,MATCH(1,MMULT(--(names=A106),TRANSPOSE(COLUMN(names)^0)),0)),"")

使用:

=IFERROR(INDEX(auditors,AGGREGATE(15,7,(COLUMN(names)-MIN(COLUMN(names))+1)/(names=H2),1)),"")

假设您的第一个页眉在 A1 中。把那个公式放在A2里,然后往下复制。

将其用作数组公式似乎可以很好地解决问题:

{=INDEX(Auditors;1;SUM(IF(Names=Auditors;COLUMN(Auditors);0)))}

这通过创建一个与 table 大小相同的矩阵来实现,其中单元格包含 0 或单元格的列(如果存在匹配项)。请注意,它假定您的审计员定义的范围从第 1 列开始并包括 headers 和数据(我使用 $A$1:$C$4)

此外,如果没有匹配项,这将 return 默认情况下审核员 1;要强制出错,您可以使用 SUM 结果将为零的事实,例如:

{=INDEX(Auditors;1;1/(1/SUM(IF(Names=Auditors;COLUMN(Auditors);0))))}

此外,由于它在整个 Auditors table 中查找,因此它也会匹配 auditors 本身;如果这不是您想要的,您可能需要为 header 和审计员 table 的数据定义单独的范围,或者相应地抵消它们。

有时有理由不想要数组公式。这是一个使用常规旧 SUMPRODUCT.

的示例
=INDEX(header_row,SUMPRODUCT((names=specific_name)*(COLUMN(header_row)-COLUMN(header_row_first_cell)+1)))

除 specific_name 外,所有 cells/ranges 都应修复。

  • header_row 是从审计员 1 到审计员 3 的 1 x 3 范围
  • 名称是矩阵中名称的 3 x 3 范围
  • specific_name 是您要查找的具有名称的单个单元格
  • header_row_first_cell 是 header_row 中的第一个单元格,所以 Auditor 1

此外,我通常喜欢索引我的行和列,而不是 COLUMN(header_row)-COLUMN(header_row_first_cell)+1 废话。因此,在 header 上方,我将对列进行编号,从 1 到 3 并简单地使用该范围。

=INDEX(header_row,SUMPRODUCT((names=specific_name)*(column_index)))