Excel: INDEX( ,MATCH( ), )) の組み合わせは範囲では機能しますが、TABLE としてフォーマットされたデータでは機能しません。

Excel: INDEX( ,MATCH( ), )) の組み合わせは範囲では機能しますが、TABLE としてフォーマットされたデータでは機能しません。

セットアップ:

データを含む Excel シートが 2 つあり、どちらも「テーブルとしてフォーマット」されています。1 つは多数の行と列 (フィールド) を持つ大規模なデータ セットで、もう 1 つは 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       |

最初の行は適切に一致していますが、2 行目 (これも最初の行と同じ) が見つからず、そこからエラー値が始まります。どうすればよいでしょうか?

ありがとう

答え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)

または、各 productName が一意である場合は、SUMIF を使用できます。

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

答え2

これはうまくいくはずです:

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

注意: #ALL を使用すると、行だけでなく列全体が選択されます。

関連情報