Excelで複数条件のデータを抽出する方法(INDEX+SMALL+IF配列数式)

データ分析や業務処理で 特定の条件に一致する複数のデータを抽出したい というケースはよくあります。
例えば次のような表があるとします。

F列G列
A10B6000A10B6070
A10B8000A10B8000
A10B8000A10B8190
A10B7000A10B7095
A10B8000A10B8140

この表から 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結果
12
23
35

となります。

この式では

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で条件に一致する複数データを抽出する方法として、以下の方法があります。

  1. INDEX+SMALL+IF+ROW(従来の配列数式)
  2. FILTER関数(最新Excel)

配列数式は少し複雑ですが、Excelの内部動作を理解するうえで非常に重要です。
特に データ抽出や高度な検索処理 を行う場合、このテクニックは今でも多くの場面で活用されています。

Excelを使ったデータ処理の効率を上げるためにも、ぜひ一度この仕組みを理解しておくことをおすすめします。