ExcelでVLOOKUPを使うと、重複データがあっても最初に見つかった値しか返ってこないことに悩んでいませんか。重複の先頭以外(2番目以降のデータ)を取得したいシーンは多く、単純なVLOOKUPでは対応できません。本記事では、最新情報を元に、Excelのバージョンを問わず、重複の先頭以外も含めて取得する方法を徹底解説します。
目次
Excel VLOOKUP 重複 先頭以外 取りたいというケースとは何か
VLOOKUPを使ってデータを検索する際、ある検索値(たとえば商品IDや名前)が同じものが複数あり、それぞれに対応する情報を取得したいが、通常は最初に見つかったものだけが返却され重複した後のものが無視されるという問題があります。たとえば一覧表に同じ社員番号が複数あり、その社員の各月の売上を取得したい時、VLOOKUPは最初の売上しか返しません。
このような「重複の先頭以外を取りたい」という要求に対して、どのような方法が取れるのかを知ることが重要です。Excelのバージョン、関数の組み合わせ、配列数式やFILTERなどを使えば実現可能です。
なぜVLOOKUPは先頭だけを取得するのか
VLOOKUPは「最初に見つかったマッチ」を返す設計になっており、検索対象範囲の一番上から順に探します。完全一致モードを使っても変わりません。また、近似一致モードを使うと、ソートされたデータで最後のマッチが返ることがありますが、これも重複データから2番目以降を取得する用途には適していません。つまりVLOOKUPだけでは重複の先頭以外を扱うことはできない構造です。
検索意図と利用シーン
「Excel VLOOKUP 重複 先頭以外 取りたい」というキーワードで検索するユーザーが想定するシーンには以下があります。
・売上データや注文データなどで同じIDに対して複数行があり、2件目以降の値を集計や表示したい。
・重複を除外するのではなく、すべて取得したいがVLOOKUPだけでは不足。
・Excelのバージョンによっては動かない関数もあるため、互換性を考慮したい。
これらを満たす解決案がこの記事で得られます。
Excelのバージョンによる制約
Excel 365やExcelの最新バージョンではFILTER関数やXLOOKUPなどが利用でき、重複を含む複数の結果を返す機能が標準でサポートされています。旧バージョン(Excel 2019以前やExcel 2016など)ではFILTERがなく、配列数式やINDEX・MATCH・SMALL・IFの組み合わせが必要になります。どのバージョンかによって使える手法が異なります。
Excelで重複の先頭以外(2番目以降)を取得する主要な方法

重複データの2番目以降を取得するには、いくつかのアプローチがあります。それぞれ長所と短所があり、データ量やExcelのバージョンによって選び方が変わります。ここでは代表的な方法を複数紹介します。
FILTER関数を使う方法(Excel 365等)
最新ExcelではFILTER関数が強力です。検索値に一致するすべての行を返し、スピル(複数セルへの展開)で2件目以降の値も含めて表示できます。たとえば「ID列に検索値がある行から対応列を取得」といった使い方ができます。処理が簡潔で速く、重複を除外しない取得に最適です。
SMALL・INDEX・IFを組み合わせる方法(旧バージョン対応)
FILTERが使えないExcelでは、IFで条件に合う行番号を取得し、SMALLで2番目以降の最小値を取り、INDEXでその行の対応列を参照する手法が用いられます。この方法は配列数式となり、セルをドラッグダウンして複数の結果を得ることになります。やや複雑ですが、旧バージョンでも動作します。
TEXTJOIN+IFで複数値を一つのセルにまとめる方法
複数の結果を一つのセルに文字列としてまとめたい場合、TEXTJOIN関数とIFを組み合わせて「検索値と一致する行の対応値を区切り文字付きでまとめる」ことができます。非表示の空セルを除くオプションを使えば見栄えも整い、複数の値を1セルで見る用途に便利です。
具体的な例と実践ステップ

ここからは具体例を使って「重複の先頭以外を取得する方法」をステップバイステップで解説します。データ構成や数式の組み方、注意点を確認していきます。
サンプルデータの準備
まずは以下のような構成のデータを想定します。
・A列にID(重複あり)
・B列に対応する値(例えば売上や社名など)
この構造で「IDが”A001”である2件目以降のB列の値を取得したい」という要求を例にします。データの行数が多ければ多いほど、効率の良い方法を選ぶことが重要です。
方法1:FILTERを使ってすべて取得 → 2番目以降を抽出
Excel 365などで使える方法です。FILTER関数で検索値に一致するすべてのB列の値を取得します。たとえば =FILTER(B2:B100, A2:A100=“A001”) とすれば、対象IDのすべての値が取得されます。
さらに最初の値を除きたい場合、INDEX関数やOFFSETといった補助関数で1件目をスキップするテクニックを組み合わせることも可能です。
方法2:配列数式で2番目のマッチを取得する
FILTERがない状況での代表的手法です。以下のような数式をセルに入力し、Ctrl+Shift+Enterで配列数式とします。
=IFERROR(INDEX(B$2:B$100, SMALL( IF(A$2:A$100=“A001”, ROW(A$2:A$100)-ROW(A$2)+1 ), 2 ) ), “”)
この数式は、ID列で検索値に一致する行の中から2番目の行番号を取得し、対応するB列の値を返します。3番目以降を取得するには SMALL の k の部分(上例の2)を変えるか、複数行に展開します。
方法3:TEXTJOINで複数の結果を1つのセルにまとめる
検索値に一致するすべての値を1つのセルに集約する方法です。Excelがサポートしていれば TEXTJOIN+IF を使います。例:
=TEXTJOIN(“, ”, TRUE, IF(A2:A100=“A001”, B2:B100, “”))
この数式は検索値に一致する B 列の非空値をすべて「, 」で区切って1つの文字列として表示します。2番目以降だけでなく、すべての値がまとめられますが、1件目を除くなどの細かい制御はさらに工夫が必要です。
Excel関数の特徴比較と選択のポイント
上記の方法を比較して、どの状況でどの方法が最も適しているかを判断するための比較を行います。それぞれ性能や可読性、互換性に違いがあります。
| 方法 | FILTER / XLOOKUP | 配列数式(INDEX+SMALL+IF) | TEXTJOIN 集約 |
|---|---|---|---|
| 対応Excelバージョン | 最新版/365など | 古いバージョンも可 | 2019以降または365が望ましい |
| 2番目以降の取得 | 簡単にスピルで取得可能 | SMALL の k 値を調整して取得可能 | 順序を保ちつつ全体を文字列で取得 |
| 見た目(可読性) | 複数セルにわたる結果が見やすい | 数式が複雑で理解しにくいことがある | 一つのセルで済むが長い文字列になる |
| パフォーマンス | 高速で処理が軽い | 大データで処理が遅くなることあり | 中程度;文字列操作で重くなることあり |
選択のポイント
まずExcelのバージョンを確認してください。365または最新なら FILTER が最有力。旧バージョンなら配列数式が現実的な選択肢です。
また、取得したいデータが何件あるかを想定し、表示形式(複数セル/1セルにまとめる)を考慮。可読性や運用のしやすさを重視するなら FILTER や複数セル取得がおすすめです。TEXTJOIN はまとめて把握したい時に向きます。
実践:よくあるパターンとその解決方法

具体的な業務で遭遇する典型例を取り上げ、それぞれに向いた方法と数式を紹介します。
ケース1:売上データで同じ売上員IDの2回目の売上を取得したい
売上データ表で A列に社員ID、B列に月別売上。このうち「社員ID 123」の2回目の売上を取得したい場合。
Excel 365なら FILTER で
= FILTER(B2:B100, A2:A100=123) によってすべての売上が一覧で返るので、その中から 2番目の値を INDEX(結果,2) で取り出せます。
旧バージョンなら SMALL+INDEX を使い、先に該当する行番号を取得し間接的に2件目の値を引く配列数式が有効です。
ケース2:重複データを除いたいが、2番目以降のデータをリストで把握したい
重複を除いたユニークなID一覧と、それに対応するすべての値を把握したいケースでは、まずユニーク関数や重複除去で ID 一覧を作り、次に各 ID に対して FILTER や INDEX/SMALL を使ってすべての値を取得します。
この方法はドリルダウン分析やデータ洗浄用途で非常に便利です。
ケース3:複数列条件による重複判断とその2件目以降の取得
IDだけでなく、日付や商品の種類など複数の条件を組み合わせて重複を判断するケース。
この場合 IF+AND+条件付き COUNTIFS を使って複雑な一致条件を定義し、SMALL の中でそれらを使って対象となる行を絞り込みます。例:IF( (A列が検索値) AND (C列が特定値), 行番号, “” ) を使うと、複数条件にも対応可能です。
注意点とトラブルシューティング
重複の先頭以外を取得する実装にあたって、よくある問題とその対処法をまとめます。
#NUM や #REF エラーが出る
配列数式で SMALL を使う際に、指定した k が対象となる行数より大きいと #NUM エラーになります。たとえば 2番目を取得したいのに該当が1件しかないときです。IFERROR や IF と組み合わせて空文字や別の表示に置き換えると見栄えがよくなります。
Excel バージョンによる互換性の問題
Office のサブスクリプション版や365以外の旧バージョンでは FILTER や UNIQUE といった関数が使えないことがあります。そういった場合は INDEX, MATCH, SMALL, IF の組み合わせによる古典的手法を採用する必要があります。また、配列数式の入力時に Ctrl+Shift+Enter が必要な場合があります。
可読性とメンテナンス性
複雑な数式を長く使い続けると、後で修正や理解が難しくなることがあります。関数の入れ子や長い式を避け、必要に応じてヘルパー列を使う、ドキュメントに数式の意味を書いておくとよいです。TEXTJOIN や FILTER を使える環境なら、それらを優先することでシンプルになります。
まとめ
VLOOKUPだけを使うと、重複データの先頭以外を取得することはできません。検索値に対応する2番目以降の値を取りたい場合、以下の方法を検討してください。
- Excel 365などで FILTER を使う方法
- 旧バージョンで使う INDEX+SMALL+IF の配列数式
- TEXTJOIN を使って複数値を1セルにまとめる方法
使用しているExcelのバージョンやデータ構造、目的に応じて適切な方法を選べば、「重複の先頭以外を取得する」要件は実現可能です。まずは自分の環境で FILTER が使えるか確認し、使えない場合は配列数式で代替することをおすすめします。
コメント