Return 如果两个表之间存在匹配项,则为一个值

Return a value from if there is match between 2 tables

首先,我将描述场景,我有 2 tables,第一个 table 列,如 Hsname、prod、ver 和 bundled(fill-up 值使用公式)和第二个 table 包含 prod、ver 和 bundled 等列。我必须从第 2 个 table 捆绑列到第一个 table 捆绑列中获取值,这两个 table 中的产品和版本完全匹配。以下是所附的屏幕截图和使用的公式

=IF(AND(MATCH(B2,Sheet2!$A:$A,0),MATCH(Sheet1!C2,Sheet2!$B:$B,0)),Sheet2!C2:C14,"No")

注意:我使用的是旧版本的 excel,但无法使用动态数组。

我希望这就是您正在寻找的,

• 单元格 D2

中使用的公式
=IFERROR(INDEX(LOOKUP(ROW($I:$I),
ROW($I:$I)/($I:$I<>""),$I:$I),
MATCH(B2&C2,$G:$G&$H:$H,0)),"")

所以让我稍微解释一下上面的公式,它是如何工作的,

• 首先我连接了 Product & Version 单元格并使用 MATCH 函数来找到每个

的位置
MATCH(B2&C2,$G:$G&$H:$H,0)

• 接下来我使用了 LOOKUP 函数和 ROW 函数来创建捆绑列数组

LOOKUP(ROW($I:$I),ROW($I:$I)/($I:$I<>""),$I:$I)

• 最后,我将全部包装在 INDEX 函数和 IFERROR 函数中(忽略错误)

=INDEX(LOOKUP(ROW($I:$I),
ROW($I:$I)/($I:$I<>""),$I:$I),
MATCH(B2&C2,$G:$G&$H:$H,0))

因此我们得到了预期的输出!

编辑

使用辅助列

用辅助列也可以实现。请参考下图

• 辅助列中使用的公式 J

=LOOKUP(2,1/($I:I2<>""),$I:I2)

• 单元格 D2

中使用的公式
=IFERROR(INDEX($J:$J,MATCH(1,(B2=$G:$G)*(C2=$H:$H),0)),"")

数组公式需要输入CTRL + SHIFT + ENTER

然后向下填充!

编辑

没有 Helper 与上述公式相同,如果您不是 Excel 2021 或 O365 用户,您需要按 CTRL + SHIFT + ENTER

=IFERROR(INDEX(LOOKUP(ROW($J:$J),
ROW($J:$J)/($J:$J<>""),$J:$J),
MATCH(1,(B2=$H:$H)*(C2=$I:$I),0)),"")

---------------------------------------- ---------------------------------------------- ----------

我有点偏离 old-fashioned 公式,所以也许有人可以想出更简洁的东西,但这是我的两分钱:

D2

中的公式
=LOOKUP(2,1/(H:INDEX(H:H,SUMPRODUCT((F:F=B2)*(G:G=C2)*ROW(H:H)))<>""),H:H&"")
  • LOOKUP() 可以说是 auto-CSE 这个公式,其中;
  • 我们将查找范围中的每个值与一个空字符串连接起来,以防止出现不需要的结果(零);
  • 布尔结构用于查找行号;
  • INDEX() 用于构建一个动态范围,LOOKUP() 可以从我们的查找范围中找到最后一个(也是第一个)值。

请注意,这是有效的,因为合并区域的左上角单元格保留其值。另请注意,合并单元格是 Excel 最糟糕的噩梦。

请注意,查找范围是超出列 F:G 范围的一个单元格,例如:H:H,因为如果最后一个包,它会抛出错误而不是空字符串不是合并的单元格,而是独立的单元格。