どうも!シャチクショーです!
検索方法については
- 商品名と連番を &(アンパサンド) で繋ぎ、一意(ユニーク)な値を作る
- 連番を昇順で表示させる(カウントされている分だけ)
- VLOOKUPで検索を行う
この3ステップで2番目以降の該当する値も検索が可能です。重複データの対処法については、これで解決!
下記で手順を説明致します。
Excelの VLOOKUP 関数で複数該当の2番目以降を抽出する方法
VLOOKUP関数やINDEX MATCH関数では基本的には「上から検索して1番最初に一致した行のみ」しか検索することが出来ません。一工程で完結させようと思うとそれは難しいのですが、少し工程を加えれば2番目、3番目、4番目・・・と最初の行以外も好きなだけ検索して引っ張ってくることが可能です!いくつかの関数を駆使しながら、下記表のように2番目以降も検索が出来るやり方を解説していきます。 今回は重複した商品名の情報を元に値段を検索します。
下記より作成済のエクセルファイルをダウンロード可能です。
商品名と連番を &(アンパサンド) で繋ぎ、一意(ユニーク)な値を作る
まず最初にやることは複数該当している値がある場合は、一意(ユニーク)な値を生成する必要があります。やり方としては商品名と 連番 を&(アンパサンド)で繋ぎます。
番号の割り当てる方法としてはCOUNTIF関数を使います。
=COUNTIF(範囲,検索条件)
『A2』セルに「=C2&COUNTIF(C$1:C2,C2)」と記入します。
範囲を『C$1:C2』と先頭のセルを絶対参照にしているのは、『A2』セルで入力した式をオートフィルで下に引っ張った時に先頭のセルが固定されて選択範囲が行に合わせて広がるようにする為です。
一番下のセルを確認してみると『C$1:C13』と選択範囲が広がっているのが確認出来るかと思います。
また、番号が上から順にそれぞれの商品名の右側に連番が振られているのも確認できるかと思います。
VLOOKUP関数を使う場合は検索値がある列を一番左にしておかないと、検索が出来ないので必ず一番左に来るように気を付けてください。
検索値を気にしなくていい上位互換のINDEX MATCHでのやり方は以下から確認できます。
『 $ 』絶対参照 を付けるショートカットキーはF4
連番を昇順で表示させる(カウントされている分だけ)
次はちょっと式が長くなりますが、『G4』セルに下記数式を記入します。
=IF(OR(G3=COUNTIF($C$2:$C$13,$G$3),G3=””,0=COUNTIF($C$2:$C$13,$G$3)),“”,ROW(A1))
ここでは新たにIF関数、OR関数、ROW関数を使用しています。
=IF(論理式,[値が真の場合],[値が偽の場合]) /論理式の結果に応じて指定された値を返す/
=OR(論理式1, 論理式2,…) /いずれかの引数がTRUEならTRUE。すべてがFALSEならFALSEを返す/
=ROW(参照) /参照の行番号を返す/
この式の中にはOR関数を使っているので論理式が3つあります。
- G3=COUNTIF($C$2:$C$13,$G$3) →『C2からC13』の間に『G3(りんご)』カウントし、『G3』と同じだったら~
- G3=””→『G3』セルが空欄だったら~
- 0=COUNTIF($C$2:$C$13,$G$3) → 『C2からC13』の間に『G3(りんご)』をカウントし、 『0』と同じだったら~
「”〇〇〇”」ダブルクォーテーションで囲われたものは文字列と認識されます。また「””」ダブルクォーテーションを2つ書くと空欄と認識されます。
この論理式でいずれかに該当した場合は、『””』空欄を返し(真の場合)、どれも該当しない場合は『A1』の行番号を返す (偽の場合) という内容になっています。
この3つの論理式を使うことでカウントした最大数より大きい番号や、カウントした結果が0だった場合にセルが空欄になるように書いています。
また、ROW関数を使う理由は昇順で連番を付けれるようにするため今回はROW関数を使用しました。
検査値を商品名と連番を&(アンパサンド)で繋いで検索を行い、値段の値を取り出す
この後は取り出したい値(今回は値段)をよく使うVLOOKUP関数を用いて取り出すだけです。知らない人もいるかと思いますが、検査値は&(アンパサンド)を使うことも可能です。
『H4』セルに「=IFERROR(VLOOKUP($G$3&G4,A2:E13,5,FALSE),””)」と記入します。
「$G$3&G4」は『りんご1』と同じ意味になります。記入した数式を下の行まで入れたら完成です!
まとめ
VLOOKUP関数で2番目以降の該当する値も全て検索する方法は以下の手順で可能です。
- 商品名と連番を &(アンパサンド) で繋ぎ、一意(ユニーク)な値を作る
- 連番を昇順で表示させる(カウントされている分だけ)
- 検査値を商品名と連番を&(アンパサンド)で繋いで検索を行い、値段の値を取り出す
また、VLOOKUP関数ではなく、INDEX MATCH関数を使えば、 検索列を左にする必要はないのです。ぜひ、興味がある方は下記のINDEX MATCH関数の使い方をご覧ください。
コメント