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
,因为如果最后一个包,它会抛出错误而不是空字符串不是合并的单元格,而是独立的单元格。
首先,我将描述场景,我有 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
,因为如果最后一个包,它会抛出错误而不是空字符串不是合并的单元格,而是独立的单元格。