INDEX+MATCH関数を複数のOR条件にする|IFと組合わせ

ここでは、エクセルのINDEX+MATCH関数を「複数のOR条件にする方法」を解説します。

 

IF関数と組み合わせた、短く分かりやすい数式の紹介です。

 

なお、「どちらも満たす」のAND条件の数式の作り方は、次のページで紹介しています。

⇒ INDEX+MATCH関数で複数条件にANDで一致したデータを抜き出す方法

1.まずはやりたいことを確認

まずは、やりたいことを例を含めて確認します。

 

1-1.INDEX+MATCH関数を複数のOR条件にしたい

やりたいことは、「INDEX+MATCH関数を複数のOR条件する」です。

 

ポイントは、次の通りです。

ポイント
  • 複数の条件を指定できる
  • 優先度の高い順から判定される
  • 条件に一致したデータが抽出される

そもそもOR条件とは、「『どれかに当てはまるか?』を判定したい条件」のことです。

 

なので、条件は複数指定できる必要があります。

 

また、条件には優先度があり、高い順から判定されます。

 

そして、最終的に条件に一致するデータが抜き出されます。

 

1-2.例で確認

一つ例を見てみましょう。

上の表は「商品販売実績の一覧表」です。

 

販売日や売れた商品名、販売先や個数、単価などが入力されています。

 

例えばこの表から「商品名に『タオル』か『定規』のどちらか」が入ったデータを抜き出したい時には、「INDEX+MATCH関数で複数条件をORで指定する」と、正しく抽出することができます。

例では商品名に「タオル」の入ったデータの方が先にあったため、そのデータがセルA15からF15に抜き出されています。

 

このように、通常条件を一つしか指定できない「INDEX+MATCH関数」で、複数条件をORで指定する方法を、この後解説します。

 

なお、条件に合うデータをOR条件で、1件だけでなく全部抽出したいといった場合には、また数式が異なります。

 

別のページで解説していますので、そちらを参照してください。

⇒ 「指定条件に合うデータ全てを一覧表からエクセル関数で順に抽出する方法」のページへはこちら

2.数式は「抽出元の範囲が同じか?」で変わる

INDEX+MATCH関数をOR条件にする場合、数式の形は「抽出元の範囲が同じか?」で変わります。

上は、抽出元の範囲が同じ場合の例です。

 

条件のどちらに該当しても、抽出元の範囲は変わらないパターンです。

 

これに対して、一致する条件によって抽出元の範囲を変えたい場合もあります。

 

これら2つのパターンは、数式が異なります。

3.抽出元範囲が同じ→IF関数

まずは、抽出元の範囲が同じ場合の数式から見てみましょう。

 

3-1.数式の形は

どの条件に該当しても抽出元の範囲が同じ場合、数式の形は次の通りです。

=INDEX(配列,MATCH(IF(COUNTIF(検査範囲,検査値1)>0,検査値1,検査値2),検査範囲,照合の種類),列番号)

※ 条件が2つの場合

 

このように、IF関数とCOUNTIF関数を組み合わせます。必要なのは全部で6項目(引数)で、次の通りです。

引数
  • 配列:抽出元の範囲
  • 検査範囲:条件一致を確認する範囲
  • 検査値1:一つ目の条件
  • 検査値2:二つ目の条件
  • 照合の種類:完全一致/近似値一致
  • 列番号:抽出する列の位置

検査値は2つですが、各引数の指定の仕方は「INDEX+MATCH関数」と全く同じです。

 

そのため指定の仕方は、ここでは詳しく解説しませんが、もし確認したい場合には次のページを参照してください。

⇒ INDEX+MATCH関数の使い方はこちら

 

ちなみに、条件値が3つの場合には次のようになります。

=INDEX(配列,MATCH(IF(COUNTIF(検査範囲,検査値1)>0,検査値1,IF(COUNTIF(検査範囲,検査値2)>0,検査値2,検査値2,検査値3)),検査範囲,照合の種類),列番号)

このように、条件を増やす場合にはIF関数を重ねるとOKです。

 

3-2.数式の作り方

次に、数式の作り方を見てみます。

上の表から「商品名が『タオル』か『定規』」の一連のデータを抜き出します。

 

つまり条件は、「タオル」と「定規」です。

 

以下手順です。

 

(1)以下の数式をコピーし、セルに貼り付ける

【コピーする数式】

=INDEX(配列,MATCH(IF(COUNTIF(検査範囲,検査値1)>0,検査値1,検査値2),検査範囲,照合の種類),列番号)

 

(2)「配列」の文字を消し、抽出元の範囲を指定後、F4キーを1回押す

 

(3)「検査範囲」の文字を消し、条件一致を確認する範囲を指定後、F4キーを1回押す(2ヶ所)

 

(4)「検査値1」の文字を消し、最優先の条件値を指定後、セル番号の場合にはF4キーを1回押す(2ヶ所)

 

(5)「検査値2」の文字を消し、2番目に優先の条件値を指定後、セル番号の場合にはF4キーを1回押す

 

(6)「照合の種類」の文字を消し、「0」を入れる

 

(7)「列番号」の文字を消し、「COLUMN(A1)」と入れる

 

(8)Enterキーを押す

 

(9)セルの右下にカーソルを当て、ポインタが「+」になったら左ドラッグして数式をコピーすれば完了

これで、INDEX+MATCH関数をOR条件にすることができます。

 

なお、(7)のところでCOLUMN関数を入れるのは、(9)の数式コピー時に列番号を手直ししなくていいようにするためです。

 

もし他のセルに数式をコピーしない場合、列番号にはCOLUMN関数ではなく数値を入れるとよいでしょう。

 

なお、条件が3つの場合は以下をコピーして使ってください。

【コピーする数式】

=INDEX(配列,MATCH(IF(COUNTIF(検査範囲,検査値1)>0,検査値1,IF(COUNTIF(検査範囲,検査値2)>0,検査値2,検査値3)),検査範囲,照合の種類),列番号)

口コミ・評判のいいExcel本の紹介】


4.抽出元範囲が異なる→IFERROR関数

次に、抽出元の範囲が異なる場合の数式を見てみましょう。

 

4-1.数式の形は

どの条件に該当したかで抽出元の範囲が異なる場合、数式の形は次の通りです。

=IFERROR(INDEX(配列1,MATCH(検査値1,検査範囲1,照合の種類1),列番号1),INDEX(配列2,MATCH(検査値2,検査範囲2,照合の種類2),列番号2))

※ 条件が2つの場合

 

このように、IFERROR関数と組み合わせます。必要なのは全部で5項目(引数)で、次の通りです。

引数
  • 配列:抽出元の範囲
  • 検査範囲:条件一致を確認する範囲
  • 検査値:条件
  • 照合の種類:完全一致/近似値一致
  • 列番号:抽出する列の位置

ポイントは、「INDEX+MATCH関数が2組ある」ことです。始めのINDEX+MATCH関数の条件に該当しない場合、次のINDEX+MATCH関数の条件を判定する、といった動きになります。

 

なお、引数の指定の仕方はINDEX+MATCH関数の普段の使い方と一緒なので、ここでは省略します。

 

確認したい場合には、以下のページを参考にしてください。

⇒ INDEX+MATCH関数の使い方はこちら

 

ちなみに、条件値が3つの場合には次のようになります。

=IFERROR(INDEX(配列1,MATCH(検査値1,検査範囲1,照合の種類1),列番号1),IFERROR(INDEX(配列2,MATCH(検査値2,検査範囲2,照合の種類2),列番号2),INDEX(配列3,MATCH(検査値3,検査範囲3,照合の種類3),列番号3)))

このように、条件を増やす場合にはIFERROR関数を重ねるとOKです。

 

4-2.数式の作り方

次に、数式の作り方を見てみます。

上の2つの表から「A店の『ふせん』、またはB店の『鉛筆』」の販売実績の一連のデータを抜き出します。

 

以下手順です。

 

(1)以下の数式をコピーし、セルに貼り付ける

【コピーする数式】

=IFERROR(INDEX(配列1,MATCH(検査値1,検査範囲1,照合の種類1),列番号1),INDEX(配列2,MATCH(検査値2,検査範囲2,照合の種類2),列番号2))

 

(2)「配列」の文字を消し、抽出元の範囲を指定後、F4キーを1回押す(1と2の両方)

 

(3)「検査値」の文字を消し、最優先の条件値を指定後、セル番号の場合にはF4キーを1回押す(1と2の両方)

 

(4)「検査範囲」の文字を消し、条件一致を確認する範囲を指定後、F4キーを1回押す(1と2の両方)

 

(6)「照合の種類」の文字を消し、「0」を入れる(1と2の両方)

 

(7)「列番号」の文字を消し、「COLUMN(A1)」と入れる(1と2の両方)

 

(8)Enterキーを押す

 

(9)セルの右下にカーソルを当て、ポインタが「+」になったら左ドラッグして数式をコピーすれば完了

こちらも他のセルに数式をコピーしない場合、列番号にはCOLUMN関数ではなく数値を入れるとよいでしょう。

 

なお、条件が3つの場合は以下をコピーして使ってください。

【コピーする数式】

=IFERROR(INDEX(配列1,MATCH(検査値1,検査範囲1,照合の種類1),列番号1),IFERROR(INDEX(配列2,MATCH(検査値2,検査範囲2,照合の種類2),列番号2),INDEX(配列3,MATCH(検査値3,検査範囲3,照合の種類3),列番号3)))

以上、参考になれば幸いです。

 

次のページでは、INDEX+MATCH関数で条件に該当する2番目以降のデータの抜き出し方を解説します。よかったら参照してください。

→ 次のページへはこちら

 

Top