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
最初は考えないといけませんが、慣れるといろいろ応用できるようになるので、おすすめです!