いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)VLOOKUP関数で左側の値を取得する

 VLOOKUP関数で検索範囲よりも左側の列にある値を取得する方法についてです。

  • VLOOKUP関数とHSTACK関数を併用すれば検索範囲の列よりも左側の値を取得できます。
  • ただしVLOOKUPにこだわる理由がなければXLOOKUP関数の使用をおすすめします。

手順

 次の画像ではF3セルに入力された商品IDをD列から検索し、一致する位置に対応する商品名をB列から取得しています。

 G3セル

=VLOOKUP(F3,HSTACK(D3:D7,B3:B7),2,FALSE)

 「HSTACK(D3:D7,B3:B7)」の部分で、D列を左側に、B列を右側に置いた2列の配列(行列)を生成しています。
 これをVLOOKUP関数の第2引数(検索範囲)として第3引数を(列番号)を「2」とすることで左側からの値の取得を事実上可能にしています。
 このようにVLOOKUP単体での使い方と比較して検索の自由度が増すほか、他の列の追加・削除があっても取得する列がズレないというメリットがあります。
 ただ、HSTACK関数が使えるなら後述のXLOOKUP関数が使えるはずですので、そちらの方が簡単です。

代替案

 上記と同じ内容のデータ取得を、別の関数で行う方法について2つの例を示します。

XLOOKUP関数を使う方法

 VLOOKUP関数の後継であるXLOOKUP関数を使えば検索範囲と取得範囲の位置関係を気にせず値を取得できます。

 G3セル

=XLOOKUP(F3,D3:D7,B3:B7)

 検索値、検索範囲、取得範囲の3つを記すだけで値を取得でき、VLOOKUP関数のように(完全一致検索のために)いちいち「FALSE」を書かなくていいのがポイントです。
 XLOOKUP関数について詳しくは次の記事で紹介しています。

www.officeisyours.com

INDEX/MATCH関数を使う方法

 少々複雑ですが難易度的にはVLOOKUP関数と変わらず、古いバージョンのExcelでも使えるので覚えておきたいやり方です。

 G3セル

=INDEX(B3:B7,MATCH(F3,D3:D7,0))

 F3の値(A002)をD3:D7の範囲内で検索すると上から2番目にあることがわかります。このことから「MATCH(F3,D3:D7,0)」により「2」という数値が取得できます。
 これをINDEX関数の第2引数とすることでB3:B7の範囲の上から2番目の値「いちご大福」を取得しています。