VLOOKUP(HLOOKUP)
VLOOKUP関数をarrayformula内で使用する時のhow-toです。
(とは言っても実は普通に使えるのですが)
今回はVLOOKUP関数のみを扱いますが、HLOOKUP関数も全く同様の仕様になっていますので同じ記法でOKです。
VLOOKUP関数とは1つめの引数に検索してほしい要素を渡し、2番目の引数の"先頭の列(HLOOKUPの場合は先頭の行)"の中から検索します。
そして、もし要素が見つかった場合、その列にあるセルのうち先頭行を1として3番目の引数で渡した番号の行にある要素を返す関数です。
※参考1:VLOOKUP - ドキュメント エディタ ヘルプ (google)
※参考2:HLOOKUP - ドキュメント エディタ ヘルプ (google)
例えば、
の左2列のように氏名と時給の一覧が掲載されたテーブルがあり、他の場所で氏名から検索して時給を抜き出したいとしましょう。
このとき、通常の全てのセルに書いていく形式だと以下のようになります。
そして、Arrayformulaを使用する時も通常の形式と同様に書けば大丈夫です。
ただし、Arrayformulaは列のある限り検索を行いますので、以下のように列すべてを検索範囲にしてしまうと下の列が延々と#N/Aで埋められてしまいます。
そこで、Arrayformulaの中でVLOOKUP(HLOOKUP)を使用する際は、
-
good exampleの1番目のように1番目の引数の範囲を区切る
-
good exampleの2番目のようにVLOOKUP関数全体をIFERROR関数でくくり、
エラーが吐かれる場所に何も出ないようにしておく
のどちらかの対策を講じるのがいいでしょう。
あまり要素の追加/削除がないなら前者の対策を、頻繁に要素の追加/削除がある(特にこれから更に追加するような状況)の時は後者を使った方がよいと思います。
ちなみに、2013年12月以降の新しいgoogle スプレッドシートでは問題ないようですが、
以前のスプレッドシートではどの列のセルの要素を返すかという3番目の引数も配列にしないといけなかったようです。
※参考:How do I use VLOOKUP within ARRAYFORMULA? - Google プロダクト フォーラム https://productforums.google.com/forum/#!topic/docs/Gs29Mx0jfSE