見出し画像

列が追加されてもVlookupが壊れないようにする簡単な方法

列追加したらVlookupが壊れた!

前回の記事で宣言していたスプレッドシートテクニックの続きです。

Vlookupは非常に多用される関数ですが、「壊れた!」と言われる回数も多い関数だと思います。
壊れる要因は色々あるのですが、多いパターンの一つとして「参照していた先(マスタシートとか)に列が追加されたことで意図しないものが取り出されるようになってしまった」があります。

発生してしまう理由としては関数の記述の中で、列番号を直接数字を入れていることで発生します。
※ 例としては「VLOOKUP(E1, A2:C26, 2, FALSE)」みたいな記述があった場合の「2」部分です
列が追加されてもあくまで「2」番目を取り出そうとするので、追加された場所によってはズレてしまい意図しない結果になります。

列が追加されてもVlookupが壊れないようにするには?

実はかなり簡単で、Vlookupの番号指定に「COLUMN関数」を使うだけでこの問題を解決できてしまいます。
COLUMN関数の定義は以下の通りです。

COLUMN
指定したセルの列番号を返します(A は 1 となります)。

使用例
COLUMN(A9)

Googleドキュメントエディタヘルプ

COLUMN関数は指定されたセルの列番号を返すだけのシンプルな関数です。COLUMN(B1)であれば2、COLUMN(C1)であれば3が返されます。

なぜこれを使うと壊れなくなるかというと、列が追加・削除されたときにCOLUMNに指定したセルが自動的に変わってくれるためです(指定していたセルが削除された場合はさすがに壊れます)。たとえば「COLUMN(C1)」として、A列・B列の間に列追加すると自動的に「COLUMN(D1)」に変化してくれます。

これを活用してみます。
例として、A~C列のマスター情報をA列をキーとして単価列を取り出してみます。
F2には数字を直接入力、G2はCOLUMNで指定してみました。

数字直接入力(F2セル)
=VLOOKUP(E2,A:C,3,FALSE)

COLUMN指定(G2セル)
=VLOOKUP(E2,A:C,COLUMN(C1),FALSE)

結果は同じものが表示されています。
ここで、列を追加してみます。B列に「カテゴリ」を追加し、単価はD列になっています。

列番号を数字で直接入力していたセルはこわれましたが、COLUMNで指定した方は元の通り単価が出ています。

ただし、この方法で注意する点はCOLUMNはA列を1とした場合の数字が帰ってきますので、Vlookupの範囲がAから始まらない場合には正しく動作しません。
その場合には以下のように、「取り出したい列 - 範囲の最初の列 + 1」と指定するとうまくいきます。

=VLOOKUP(F2,A:D,COLUMN(D1)-COLUMN(A1)+1,FALSE)

是非ご活用ください!
今後も何か小技を不定期に記事化したいと思います。