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,這會選擇整個列,而不僅僅是行。

相關內容