Excelで複数条件のデータを抽出する方法(INDEX+SMALL+IF配列数式)
データ分析や業務処理で 特定の条件に一致する複数のデータを抽出したい というケースはよくあります。
例えば次のような表があるとします。
| F列 | G列 |
|---|---|
| A10B6000 | A10B6070 |
| A10B8000 | A10B8000 |
| A10B8000 | A10B8190 |
| A10B7000 | A10B7095 |
| A10B8000 | A10B8140 |
この表から F列が「A10B8000」の行に対応するG列の値をすべて取得したい 場合、Excelではいくつかの方法があります。
最新の Microsoft Excel では FILTER 関数を使うのが最も簡単ですが、従来のExcelでは 配列数式 を使う方法がよく利用されてきました。
この記事では、その代表的な方法である INDEX+SMALL+IF+ROW を組み合わせたテクニックを解説します。
基本となる数式
次の数式を使用します。
=IFERROR(INDEX($G:$G,SMALL(IF($F:$F="A10B8000",ROW($G:$G)),ROW(A1))),"")
この式を入力して下方向にコピーすると、条件に一致するG列の値が順番に抽出されます。
ただし、Excelの古いバージョンでは Ctrl + Shift + Enter で配列数式として確定する必要があります。
数式の仕組み
この数式は4つの関数の組み合わせで動いています。
1. IF関数(条件判定)
IF($F:$F="A10B8000",ROW($G:$G))
この部分は、F列が A10B8000 の場合のみ行番号を返します。
例:
{FALSE,2,3,FALSE,5}
つまり、条件に一致する行の番号だけが残ります。
2. ROW関数(行番号の取得)
ROW($G:$G)
ROW関数は行番号を返します。
例えば ROW(G1) は 1、ROW(G2) は 2 です。
配列として計算されると
{1,2,3,4,5}
という行番号の配列になります。
3. SMALL関数(順番に取り出す)
SMALL(配列, k)
SMALL関数は 小さい順にk番目の値 を取得します。
例えば
{2,3,5}
という配列がある場合
| k | 結果 |
|---|---|
| 1 | 2 |
| 2 | 3 |
| 3 | 5 |
となります。
この式では
ROW(A1)
を使って
1 → 2 → 3 → 4
と順番に値を取り出します。
4. INDEX関数(データ取得)
INDEX($G:$G, 行番号)
INDEX関数は指定された行のデータを取得します。
例えば
INDEX(G:G,2)
なら G2の値 を返します。
これによって、条件に一致するG列の値が順番に抽出されます。
IFERRORでエラーを防ぐ
最後に
IFERROR(...,"")
を使うことで、該当データがなくなったときの #NUM! エラーを空白にしています。
例えば該当データが3件しかない場合、4件目以降はエラーになるためです。
新しいExcelならもっと簡単
最近のExcelでは FILTER関数 が使えるため、同じ処理を次のように書けます。
=FILTER(G:G,F:F="A10B8000")
この式だけで、条件に一致するすべてのデータを自動で表示できます。
配列数式を理解することは重要ですが、最新のExcelではよりシンプルな関数が提供されています。
まとめ
Excelで条件に一致する複数データを抽出する方法として、以下の方法があります。
- INDEX+SMALL+IF+ROW(従来の配列数式)
- FILTER関数(最新Excel)
配列数式は少し複雑ですが、Excelの内部動作を理解するうえで非常に重要です。
特に データ抽出や高度な検索処理 を行う場合、このテクニックは今でも多くの場面で活用されています。
Excelを使ったデータ処理の効率を上げるためにも、ぜひ一度この仕組みを理解しておくことをおすすめします。