見出し画像

Excelのvlookup関数はINDEX(MATCH())で再現したほうが便利

Excelの関数についてです。
心理学は統計を使うことが多いので、シェアします。

例 バナナの価格を知りたい


VLOOKUP関数

例えば、VLOOKUP関数を使用。
次のようなデータがあるとします。

$$
\begin{array}{c c}
A & B\\
Apple & 100\\
Banana & 150\\
Orange & 200\\
\end{array}
$$

バナナの価格を知りたいときは

=VLOOKUP("Banana", A1:B3, 2, FALSE)

のようになります。

INDEX(MATCH())

これをINDEX(MATCH())で再現すると

=INDEX(B1:B3, MATCH("Banana", A1:A3, 0))

のようになります。
この式は、まずMATCH関数で"A"列で"Banana"を検索し、その行のインデックスを返します。そして、そのインデックスを使ってINDEX関数で"B"列から値を取得します。

このように、INDEXとMATCHを組み合わせることで、VLOOKUPと同様の機能を実現することができます。

トレースすると、

=INDEX(B1:B3, MATCH("Banana", A1:A3, 0))
=INDEX(B1:B3, 2)
=150

のようになります。

INDEX関数は、指定された範囲から特定の位置の値を返す関数です。MATCH関数は、指定された値が範囲内で最初に出現する位置を返します。この場合、"Banana"はA1:A3の中で2番目の行にあるので、MATCH関数は2を返します。そして、INDEX関数はB1:B3から2番目の値を取得して返します。その結果、"Banana"に対応する値である150が返されます。

クロス集計に応用

例えば以下のようなデータがあったとします。

$$
\begin{array}{c c c}
 & Apple & Banana & Orange\\
Japan & 100 & 150 & 200\\
USA & 120 & 180 & 220\\
\end{array}
$$

セルC1には"USA"、セルC2には"Banana"という値があるとします。この交差点にある値(180)を取得するには、次のような式を使います。

=INDEX(B2:D3, MATCH(C1, A2:A3, 0), MATCH(C2, B1:D1, 0))

この式では、
最初にMATCH関数を使って"USA"がどの行にあるかを特定し(A2:A3の範囲で2番目)、次にMATCH関数を使って"Banana"がどの列にあるかを特定(B1:D1の範囲でb,cと2番目)します。その後、INDEX関数を使って該当するセルの値を取得します。このようにして、任意の行と列の交差点にあるデータを取得することができます。

トレースすると以下のようになります。

=INDEX(B2:D3, MATCH(C1, A2:A3, 0), MATCH(C2, B1:D1, 0))
=INDEX(B2:D3, MATCH("USA", A2:A3, 0), MATCH("BANANA", B1:D1, 0))
=INDEX(B2:D3, 2, MATCH("BANANA", B1:D1, 0))
=INDEX(B2:D3, 2, 2)
=180

最初は考えないといけませんが、慣れるといろいろ応用できるようになるので、おすすめです!

この記事が気に入ったらサポートをしてみませんか?