【问题标题】:Matching the cell (Using Vlooking, index, match)匹配单元格(使用 Vlooking、索引、匹配)
【发布时间】:2020-11-22 21:01:36
【问题描述】:

我已经成功让这个公式匹配了姓名和日期,

=INDEX($B$1:$D$4,2,MATCH($G$1,$B$1:$D$1,0))

但我也想用相同名称的不同行进行匹配,比如如果我在“G1”单元格中输入2020/8/4这是“B7”,则可以显示Lam = TTT99,Ma = UUU11,Co = OOO88

【问题讨论】:

  • 好吧,您需要多个匹配项,这可能具有挑战性,因此请查看并编辑它以满足您的需求:stackoverflow.com/a/58640367/4961700
  • 使用index, match, mmult。他们会帮助你!

标签: excel indexing excel-formula match vlookup


【解决方案1】:

我的建议是您以更简单的表格方式构建数据。如果这不适合您,我有一个更复杂的数组函数供您使用。 这是你的最终公式:

=INDEX($A$1:$D$10;SUMPRODUCT(($A$1:$D$10=$G$1)*ROW($A$1:$D$10))-ROW($A$1)+ROWS($B$2:B2)+1;SUMPRODUCT(($A$1:$D$10=$G$1)*COLUMN($A$1:$D$10))-COLUMN($A$1)+1)

这个公式进入G2 - 你可以把它拖到G4。我假设你的名字总是以相同的顺序是“Lam”、“Ma”和“Co”。请注意,如果您有重复的日期,此功能将不起作用。

基本上,你仍然有一个INDEX 函数。查找的行号和列号都是使用SUMPRODUCT 函数确定的(因为这个函数允许我们在二维范围内进行查找)。

第一个 SUMPRODUCT 项将产生行号:

SUMPRODUCT(($A$1:$D$10=$G$1)*ROW($A$1:$D$10))-ROW($A$1)+ROWS($B$2:B2)+1

术语$A$1:$D$10=$G$1 将检查您的数据范围内的所有单元格是否与单元格G1 中的日期匹配。想象一下,它将产生以下 TrueFalse 数组:

如您所见,对于 2020 年 8 月 5 日的选定数据,只有一个匹配项。为了获得行号,我们将这个数组与另一个 ROW($A$1:$D$10) 的假想数组相乘:

由于只有第七行包含True,所以乘法的结果将是7。即搜索到的数据所在的绝对行。

剩下的就简单了:

-ROW($A$1)+ROWS($B$2:B2)+1

该术语将简单地删除您的数据范围的第一行号(以防您的数据不是从第 1 行开始!)并允许您“拖动”您的公式,以便您可以使用它来查找 LamMaCo

列号的处理完全一样。

【讨论】:

  • 如果可能,我会支持 Wycisk 先生重新格式化您的数据的动议。像 Date、Lam、Ma、Co 这样的东西在顶部作为行中的字段和数据。然后一个简单的查找甚至数据透视表选项成为可能。
  • 亲爱的 Michael Wycisk,你能给我解释一下公式吗?
  • @CodyTong 我已经添加了一些解释。但是这种数组公式是相当先进的。我希望它能让您对它的工作原理有所了解。