Excel:INDEX(、MATCH(、)) 组合适用于范围,但不适用于格式化为 TABLE 的数据

Excel:INDEX(、MATCH(、)) 组合适用于范围,但不适用于格式化为 TABLE 的数据

设置:

我有两张包含数据的 Excel 表,均“格式化为表格”。一张是大型数据集,包含许多行和列(字段),另一张有点像“字典”,只有 2 行和 2 列(字段)。

表格1 (数据集)

+----------------------------------------------------+
| month | week | productName | price     | sold pcs. |
+---------------------------------------------------+|
| jan   | 1    | heavy       | (formula) | 25        |
| jan   | 2    | heavy       | (formula) | 51        |
| jan   | 3    | heavy       | (formula) | 06        |
| jan   | 4    | heavy       | (formula) | 00        |
| jan   | 1    | light       | (formula) | 39        |
| jan   | 2    | light       | (formula) | 11        |
| jan   | 3    | light       | (formula) | 98        |

表2 (字典)

+---------------------+
| productName | price |
+---------------------+
|  heavy      | 125   |
|  light      | 65    |

我需要做什么:

我需要做的是把价值观(产品价格)从字典中取出并放入大型数据集中,其中某些值(产品名称) 匹配。

我尝试过的:

=INDEX(Table2[@price], MATCH(Table1[@productName], Table2[@productName], 0))

当处理范围时,此组合效果很好。但是,当我像这样操作时,数据格式为表格,它仅匹配 Table1 的第一行。

这是我得到的结果

+-------------------------------------------------+
| month | week | productName | price  | sold pcs. |
+-------------------------------------------------+
| jan   | 1    | heavy       | 125    |  25       |
| jan   | 2    | heavy       | #N/A   |  51       |
| jan   | 3    | heavy       | #VALUE |  06       |
| jan   | 4    | heavy       | #VALUE |  00       |
| jan   | 1    | light       | #VALUE |  39       |
| jan   | 2    | light       | #VALUE |  11       |
| jan   | 3    | light       | #VALUE |  98       |

第一行匹配正确,但第二行(与第一行相同)未找到,并且从那里开始出现错误值。我该怎么办?

谢谢

答案1

您滥用了命名范围:

  • Table2[@productName]指向表中的单个元素
  • Table2[productName]指向整列
  • Table2指向表格的所有列和行,但不包括表头

您可以使用 VLOOKUP 轻松完成:

=INDEX(Table2,MATCH([@productName],Table2[productName],0),MATCH("price",Table2[#Headers],0))

替代解决方案:

=VLOOKUP([@productName],Table2,2,0)

=VLOOKUP([@productName],Table2,MATCH("price",Table2[#Headers]),0)

或者,如果每个产品名称都是唯一的,则可以使用 SUMIF:

=SUMIF(Table2[productName],[@productName],Table2[price])

答案2

这应该对你有用:

=INDEX(Table2[[#All],[Price]],MATCH([@productName],Table2[[#All],[ProductName]],0),1)

注意。使用#ALL,这将选择整个列,而不仅仅是一行。

相关内容