如何在 excel "vlookup" 中的多列和同一行中另一列的 return 值中搜索?

How to search on multiple columns in ecxel "vlookup" and return value from another column in the same row?

我有一个 excel 文件。 它的目的是有一个房间(工作室)和人名的列表,所以我可以知道两件事:

  1. 每个房间都有谁。
  2. 特定人的房间是什么。

文件中有 2 个电子表格。

第一个(称为“人”)是一个姓名列表,另一列说明每个人的房间是什么。注意:没有两个相同的名称。每个名字都不一样。

第二个(称为“房间”)是一个包含 5 列的列表:

当我想交换来自不同房间的 2 个人时,问题就出现了。然后,我必须在两个电子表格中进行更改。 我想找到一个公式,在“房间”电子表格中找到一个名字,并将房间号(A 列)写入 B 列“人员”电子表格的正确行中。

我曾尝试使用其中一个 lookup 公式(尤其是 vlookup),但问题是这些函数仅在第一列和 return 值中搜索来自其他列,而我需要的恰恰相反:我想从 4 列之一中查找值(特定名称),并且 return 第一列的值(房间号 - A 列)。这样我就可以转到“人”电子表格中的 B 列,并在其中为每个名字插入一个公式,这样它就可以找到正确的房间号。

另一个问题是“房间”电子表格中的房间号不一定是排序的。有时我想带一群人去另一个房间。在这种情况下,我所做的就是更改 A 列中的房间号,使列表成为 not-sorted.

我怎样才能用公式来做到这一点,我只需要更改“房间”电子表格中的人员,而不是更改“人员”电子表格中的房间号?是否有一种公式可以满足我的需要,或者我应该使用多个公式来实现我的目标?

B 列中的公式为:

=INDEX($B:$B;SUMPRODUCT(--($C:$F=A12)*ROW($B:$B))-2)

注意最后的 -2。这是因为数据从第3行开始,所以我们需要调整。

如果我们交换 2 个名字(名字 7 和 8)或 2 个完整的房间(房间 1 和 5),结果将自动更新:

对于Excel365;使用 LET 提高可读性和可修改性,您可以使用:

=LET(data, rooms!B4:E8, index, MIN(IF(data=A4, ROW(data)+1))-ROW(INDEX(data,1,1)), INDEX(rooms!A4:A8, index))

否则:

=INDEX(rooms!A4:A8,MIN(IF(rooms!B4:E8=A4,ROW(rooms!B4:E8)-3)))

使用INDEX & AGGREGATE函数

• 单元格 B4

中使用的公式
=INDEX(rooms!$A:$A,AGGREGATE(15,6,(ROW(rooms!$B:$E)-ROW(rooms!$B)+1)/(people!$A4=rooms!$B:$E),1))

那么让我解释一下如何AGGREGATE()函数returns每个emp的位置,实际上是returnsemp所在的行号

AGGREGATE(15,6,(ROW(rooms!$B:$E)-ROW(rooms!$B)+1)/(people!$A4=rooms!$B:$E),1)

接下来,当包裹在 INDEX() 函数中时,它会根据需要输出房间号。

修改后参考下图!