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;"りんご","みかん","パイナップル"} の場合
1次元(横方向/列)の配列数が3、2次元(縦方向/行)の配列数が2のため、検査に用いられる値は、1行目になります。つまり、
検査値 | 1 | 2 | 3 |
セルに表示される値 | りんご | みかん | パイナップル |
となります。
{1,2;"りんご","みかん"} の場合
1次元(横方向/列)の配列数が2、2次元(縦方向/行)の配列数が2のため、検査に用いられる値は、1列目になります。つまり、
となります。
{1,2,3;"りんご","みかん","パイナップル";"日本","日本","フィリピン"} の場合
1 | 2 | 3 |
りんご | みかん | パイナップル |
日本 | 日本 | フィリピン |
1次元(横方向/列)の配列数が3、2次元(縦方向/行)の配列数が3のため、検査に用いられる値は、1列目になり、結果の値は3列目になります。つまり、
検査値 | 1 | りんご | 日本 |
セルに表示される値 | 3 | パイナップル | フィリピン |
となります。
対策
対策1 : 列数を増やす
横方向に長い配列を渡すようにすることで、1行目を検査値に設定できます。
C1セルに以下を入力します。
=LOOKUP(A1,{1,2,3,4,5;"りんご","みかん","パイナップル","マンゴー","グレープフルーツ";"日本","日本","フィリピン","インド","アメリカ"})
A1セルに"1"を入力すると"日本"が表示されます。
A1セルに"5"を入力すると"アメリカ"が表示されます。
A1セルに"3"を入力すると"フィリピン"が表示されます。
検査値 | 1 | 2 | 3 | 4 | 5 |
セルに表示される値 | 日本 | 日本 | フィリピン | インド | アメリカ |
となり、与えた配列の1行目を検査値として指定できました。
対策2 : VLOOKUP, HLOOKUPを利用する
VLOOKUP,HLOOKUP を利用すると、検査値を1行目にするか、1列目にするかを明示的に指定できます。
VLOOKUPの利用方法は
こちらの記事を、HLOOKUPの利用方法は
こちらの記事を参照してください。
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
最終更新日: 2024-01-24
作成日: 2016-03-25