VLOOKUPは、検索する値, 対象範囲, 取り出す列, ソート済みか
という引数を持っているけど、スプレッドシートだと配列とその展開ができるので、左側の列を取り出す、というのもできる。
例えば、A1〜A10の値を使い、別のシートにある、C列を探して、A列,B列,D列を取り出す、というのはこうなる。
=ARRAYFORMULA(
VLOOKUP(A1:A10, {'データ'!C1:C100,'データ'!A1:D100}, {2,3,5}, false)
)
- A1:A10の値で検索
- 範囲は
{'データ'!C1:C100,'データ'!A1:D100}
- スプレッドシートでは
{}
で配列になり,
を使うと横にくっつけてくれる。 - ちなみに
;
を使うと縦に結合してくれるので、複数シートのデータを束ねることができる。
- スプレッドシートでは
- 取り出す範囲は 2,3,5
- 対象データが C,A,B,C,D 列になっているので、2,3,5 = A,B,D 列を指定していることになる。
- ARRAYFORMULAによって配列が展開できるので、これをB1にいれるだけで、B1:D10までを自動的に埋めてくれる。
これ、QUERY でよくね???という話にもなりそうだけどQUERYだとうまくできなかった。
=ARRAYFORMULA(
QUERY('データ'!A1:D100, "select A,B,D where C="&A1:A10)
)
FILTERもあるけど、これは行数があってないといけないのでこの場合ではできない。
でもVLOOKUPがいかなる場合でも便利でこれを使おうというわけではなく、場合によってベストな選択肢が変わる。
- 別テーブルの値を参照する
- VLOOKUP
- 同じテーブルの中から、特定の条件に基づいて絞り込む
- FILTER
- 同じテーブルの中から、複雑な条件で一部のデータを取り出す
- QUERY
あとやっぱり1つのセルで関数モリモリじゃなくて、複数のシートで段階を経て集計・計算をしていくような形にしたほうが読み解きやすいので、入り組んで複雑になってきたら中間テーブルを用意したほうがいい。