Excel - 带有 Match 的 VLoolup - 这是最佳解决方案吗?

Excel - 带有 Match 的 VLoolup - 这是最佳解决方案吗?

我试图避免重复计算与记录相同的索引,因此我是否应该使用 MATCH 预先计算索引隐藏单元格在我的桌子上方?

还值得注意的是,虽然我的表格不会很大,但也不会很小。大概会有 6 个表格,每个表格有一两个 VLOOKUPS(全列),总记录数为数百。

更准确地说,我将在 Excel 中创建一组表,并使用 VLOOKUP 函数模拟适当的关系数据库的功能来获取相关表的值,但我将使用 MATCH 函数通过其标题获取我想要的列的索引。以下是我实际使用的公式:

=VLOOKUP([@ForeignKey],RelatedTable,MATCH(RelatedTable[[#Headers],[ItemName]],RelatedTable[#Headers],0),FALSE)
'按参数细分
VLOOKUP(
  查找值 := [@ForeignKey]
  表数组 := 相关表
  Col_index_num := '返回 MATCH
      匹配(
        查找值 := RelatedTable[[#Headers],[ItemName]]
        Lookup_array := RelatedTable[#Headers]
        Match_type := 0 '完全匹配
  Range_lookup := FALSE '完全匹配

编辑:

第一个表是带有主键的表。后两个是我所指的两个示例中的任何一个。

表_产品
╔════╦════════╦═════════════════╦═════════════╗
║ ║ A║ B║ C║
╠════╬═════════╬═════════════════╬═════════════╣
║ 1 ║ 商品ID ║ 商品名称 ║ 商品价格 ║
╠════╬═════════╬═════════════════╬═════════════╣
║ 2 ║ 1 ║ 触控笔 ║ 25.00 美元 ║
╠════╬═════════╬═════════════════╬═════════════╣
║ 3 ║ 2 ║ 机械键盘 ║ $ 120.00 ║
╠════╬═════════╬═════════════════╬═════════════╣
║ 4 ║ 3 ║ 监控 ║ $ 750.00 ║
╚════╩═════════╩═════════════════╩═════════════╝

表_交易

要么像这样
╔════╦════════╦═════════╦═══════╦═════════════════════════╗
║ ║ A║ B║ C║ D║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 1 ║ 客户 ID ║ 商品 ID ║ 数量 ║ 商品名称 ║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 2 ║ 101 ║ 3 ║ 1 ║ VLOOKUP(,,Match(,,),) ║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 3║ 102║ 3║ 2║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 4║ 103║ 3║ 1║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 5║ 104║ 2║ 3║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 6║ 105║ 1║ 8║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 7║ 106║ 2║ 2║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 8║ 107║ 2║ 1║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 9║ 108║ 2║ 2║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 10║ 109║ 1║ 4║...║
╠════╬═════════╬═════════╬═══════╬══════════════════════════╣
║ 11║ 110║ 2║ 16║ ...║
╚════╩═════════╩═════════╩═══════╩══════════════════════════╝

或者像这样
(D1 单元格不是表格的一部分)

╔════╦════════╦═════════╦═══════╦══════════════════╗
║ ║ A║ B║ C║ D║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 1 ║ ║ ║ ║ 匹配(,,)║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 2 ║ 客户 ID ║ 商品 ID ║ 数量 ║ 商品名称 ║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 3 ║ 101 ║ 3 ║ 1 ║ VLOOKUP(,,D$1,) ║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 4║ 102║ 3║ 2║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 5║ 103║ 3║ 1║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 6║ 104║ 2║ 3║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 7║ 105║ 1║ 8║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 8║ 106║ 2║ 2║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 9║ 107║ 2║ 1║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 10║ 108║ 2║ 2║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 11║ 109║ 1║ 4║...║
╠════╬═════════╬═════════╬═══════╬════════════════════╣
║ 12║ 110║ 2║ 16║...║
╚════╩═════════╩═════════╩═══════╩═══════════════════╝

答案1

我会在 D2 中写入,=index(Table_Products'$B:$B,(match($B2,Table_Products'$A:$A,0)) 如果您想更改要返回的列,也可以进行双向匹配,而不是对项目名称列(B 列)进行硬编码。如果您需要,我可以修改答案。

我每天都在包含 1000 个多表查找的表单上使用它,没有发现任何性能问题。一般来说,Index/Match 比 Vlookup 更好,因为 vlookup 需要处理整个范围。

相关内容