LOOKUP関数が意図したとおりに動作しない - Excel

LOOKUP関数が意図したとおりに動作しない現象についての紹介です。

概要

こちらの記事ではLOOKUP関数を利用した数式を紹介しましたが、 同じように記述しても動作が異なる場合があります。ここでは、LOOKUP関数で動作が違う場合について紹介します。

現象の確認:2x2の配列の場合

C1のセルに下記の数式を入力します。
=LOOKUP(A1,{1,2;"りんご","みかん"})


A1のセルに"1"を入力します。こちらの記事通りの動作であれば、 "りんご"が表示されるはずですが、"2"がセルには表示されます。


"2"を入力すると、"みかん"ではなく、"2"がセルには表示されます。


一方A1セルに"りんご"を入力すると、"みかん"がセルに表示されます。

現象の確認2:3x3の配列の場合

C1のセルに下記の数式を入力します。
=LOOKUP(A1,{1,2,3;"りんご","みかん","パイナップル";"日本","日本","フィリピン"}).


"1"を入力すると、セルには"3"が表示されます。


"2"を入力すると、セルには"3"が表示されます。


"りんご"を入力すると、セルには"パイナップル"が表示されます。


"日本"を入力すると、セルには"フィリピン"が表示されます。

原因

Lookup関数の検査値に与える配列が、正方形の配列、または、1次元の個数が2次元の個数より少ない場合は、検証する行・列が逆転するためです。

{1,2,3;"りんご","みかん","パイナップル"} の場合

123
りんごみかんパイナップル

1次元(横方向/列)の配列数が3、2次元(縦方向/行)の配列数が2のため、検査に用いられる値は、1行目になります。つまり、

検査値123
セルに表示される値りんごみかんパイナップル

となります。

{1,2;"りんご","みかん"} の場合

12
りんごみかん

1次元(横方向/列)の配列数が2、2次元(縦方向/行)の配列数が2のため、検査に用いられる値は、1列目になります。つまり、

検査値1りんご
セルに表示される値2みかん

となります。

{1,2,3;"りんご","みかん","パイナップル";"日本","日本","フィリピン"} の場合

123
りんごみかんパイナップル
日本日本フィリピン

1次元(横方向/列)の配列数が3、2次元(縦方向/行)の配列数が3のため、検査に用いられる値は、1列目になり、結果の値は3列目になります。つまり、

検査値1りんご日本
セルに表示される値3パイナップルフィリピン

となります。

対策

対策1 : 列数を増やす

横方向に長い配列を渡すようにすることで、1行目を検査値に設定できます。
C1セルに以下を入力します。
=LOOKUP(A1,{1,2,3,4,5;"りんご","みかん","パイナップル","マンゴー","グレープフルーツ";"日本","日本","フィリピン","インド","アメリカ"})


A1セルに"1"を入力すると"日本"が表示されます。


A1セルに"5"を入力すると"アメリカ"が表示されます。


A1セルに"3"を入力すると"フィリピン"が表示されます。


検査値12345
セルに表示される値日本日本フィリピンインドアメリカ

となり、与えた配列の1行目を検査値として指定できました。

対策2 : VLOOKUP, HLOOKUPを利用する

VLOOKUP,HLOOKUP を利用すると、検査値を1行目にするか、1列目にするかを明示的に指定できます。 VLOOKUPの利用方法はこちらの記事を、HLOOKUPの利用方法はこちらの記事を参照してください。
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
最終更新日: 2024-01-24
作成日: 2016-03-25
iPentec all rights reserverd.