Excelで条件に合うデータを抽出したいとき、どの関数を使えばいいか迷うことはありませんか。
VLOOKUPやIF、さらに新しいXLOOKUPなど、選択肢が多いほど混乱しがちです。
この記事では、条件に合うデータを抽出するための代表的な関数を、複数条件・別シート対応も含めて徹底解説します。
初心者の方でも手順通りに進めれば確実に使いこなせるよう、サンプルデータとイメージ図つきで丁寧に説明していきます。
この記事でわかること
・IF関数・VLOOKUP・XLOOKUPで条件抽出する基本的な方法
・複数条件に対応する関数の組み合わせテクニック
・別シートのデータを参照して抽出する手順
・FILTER関数を使った動的な一括抽出の方法
エクセルで条件に合うデータを抽出する関数の基本まとめ
Excelで条件に合うデータを抽出する場面は、業務の中で非常に多く登場します。
たとえば、商品リストから特定の商品だけを取り出す・売上データから条件を満たす行だけ表示するといった操作が代表的です。
こうした抽出操作には、主に以下の関数が活躍します。
主な抽出関数の早見表
・IF関数:条件を満たすかどうかで表示内容を切り替える
・VLOOKUP関数:検索値に一致する行のデータを縦方向に取得する
・XLOOKUP関数:VLOOKUPの進化版。左列以外も検索可能
・FILTER関数:条件を満たす行をまとめて動的に抽出する
・INDEX+MATCH関数:柔軟な検索位置指定で任意のデータを取得する
それぞれの関数は得意な場面が異なります。
用途に合った関数を選ぶことが、スムーズなデータ管理への第一歩といえるでしょう。
まずは今回使用するサンプルデータを確認してください。
このサンプルを元に、各関数の使い方を順番に解説していきます。
| A列:商品名 | B列:カテゴリ | C列:単価(円) | D列:在庫数 | E列:ステータス |
|---|---|---|---|---|
| 商品名 | カテゴリ | 単価(円) | 在庫数 | ステータス |
| 桜餅 | 和菓子 | 320 | 50 | 販売中 |
| 柏餅 | 和菓子 | 350 | 0 | 在庫切れ |
| マシュマロ | 洋菓子 | 200 | 120 | 販売中 |
| チョコ | 洋菓子 | 480 | 30 | 販売中 |
| アボカド | 野菜・果物 | 150 | 0 | 在庫切れ |
| カボチャ | 野菜・果物 | 220 | 15 | 販売中 |
このサンプルでは、1行目がヘッダー行になっています。
2行目以降が実際のデータで、A列に商品名、B列にカテゴリ、C列に単価、D列に在庫数、E列にステータスが入力されています。
IF関数で条件に合うデータを抽出する方法
IF関数の基本的な構文と考え方
IF関数は、指定した条件が「真(TRUE)」か「偽(FALSE)」かによって、セルに表示する値を切り替える関数です。
データ抽出の中でも特に基本となる関数で、条件を満たす行に目印をつけたり、結果を別の値に変換したりする場面で広く使われます。
IF関数の構文
=IF(論理式, 真の場合の値, 偽の場合の値)
論理式には「A2=”販売中”」や「C2>300」のような比較式を入力します。
真の場合・偽の場合には、表示したい文字列や数値、他の関数などを指定できます。
たとえばサンプルデータで、E列のステータスが「販売中」の商品に「○」を表示したい場合、次のような数式になります。
=IF(E2=”販売中”,”○”,”×”)
この数式をF2セルに入力し、F7セルまでオートフィルで引っ張れば、全商品に対して自動的に判定結果が表示されます。
fx
=IF(E2=”販売中”,”○”,”×”)
| A | B | C | D | E | F | |
| 1 | 商品名 | カテゴリ | 単価 | 在庫数 | ステータス | 判定 |
| 2 | 桜餅 | 和菓子 | 320 | 50 | 販売中 | =IF(E2=”販売中”,”○”,”×”) |
| 3 | 柏餅 | 和菓子 | 350 | 0 | 在庫切れ | ↑ オートフィル |
IF関数でステータスを判定して表示する手順
実際の操作手順を確認しましょう。
まず、判定結果を表示したいF2セルをクリックして選択します。
次に、数式バーに「=IF(E2=”販売中”,”○”,”×”)」と入力してEnterキーを押します。
F2セルに「○」が表示されたら正しく入力できている証拠です。
続いてF2セルを再度クリックし、セルの右下にある小さな緑色の四角(フィルハンドル)をF7セルまでドラッグすることで、残り全行にも数式が自動コピーされます。
この操作をオートフィルと呼び、同じ数式を複数行に一度で適用できる非常に便利な機能です。
IF関数で数値条件を使った抽出
IF関数は文字列の一致確認だけでなく、数値の大小比較にも対応しています。
たとえばサンプルデータで、単価が300円以上の商品を「高価格」、それ以外を「標準」と分類したい場合は次の数式を使います。
=IF(C2>=300,”高価格”,”標準”)
C列の単価が300以上であれば「高価格」、未満であれば「標準」と表示される仕組みです。
このように、IF関数は条件の種類を問わず柔軟に対応できるため、データの仕分けや分類作業に非常に向いているといえます。
数値・文字列どちらの条件にも対応できる点が、IF関数の大きな強みのひとつです。
【IF関数 操作のポイント】
・文字列を条件にする場合はダブルクォーテーション(” ”)で囲む
・数値条件では「>=」「<=」「<>」などの比較演算子を活用する
・結果として表示したい文字も同様にダブルクォーテーションで囲む
・オートフィルを使えば複数行への数式コピーが一瞬で完了する
VLOOKUP関数で条件に合うデータを抽出する方法
VLOOKUP関数の構文と引数の意味
VLOOKUP関数は、指定した検索値を表の左端列で検索し、同じ行の指定した列番号にあるデータを取得する関数です。
商品名を入力するだけで対応する単価や在庫数を自動取得できるため、参照・検索業務の効率化に絶大な効果を発揮します。
VLOOKUP関数の構文
=VLOOKUP(検索値, 範囲, 列番号, 検索方法)
・検索値:検索したいデータ(商品名など)
・範囲:検索対象のテーブル全体
・列番号:取得したいデータが左から何列目にあるか
・検索方法:完全一致は0またはFALSE、近似一致は1またはTRUE
サンプルデータで「桜餅」の単価を取得したい場合、別のセルに次の数式を入力します。
=VLOOKUP(“桜餅”, A1:E7, 3, 0)
→ A列で「桜餅」を探し、同じ行の3列目(C列:単価)の値を返す
VLOOKUP関数でセル参照を使って動的に抽出する
実際の業務では、検索値を直接数式に書き込むのではなく、別のセルに入力した値を検索値として参照する形式が一般的です。
たとえばH1セルに商品名を入力し、H2セルに単価を表示したい場合は次の数式になります。
=VLOOKUP(H1, $A$1:$E$7, 3, 0)
ここで重要なのが、範囲部分の「$A$1:$E$7」という絶対参照です。
「$」をつけることで、数式をコピーしたときでも参照範囲がずれない固定した状態を保てます。
H1セルに入力する商品名を変えるだけで、H2セルに表示される単価が自動的に切り替わる仕組みです。
fx
=VLOOKUP(H1,$A$1:$E$7,3,0)
| G | H | |
| 1 | 検索商品名 | チョコ |
| 2 | 単価(円) | =VLOOKUP(H1,$A$1:$E$7,3,0) → 480 |
H1セルに「チョコ」と入力すると、H2セルに単価「480」が自動表示される
VLOOKUPで複数列のデータを一度に取得する方法
VLOOKUP関数は一度の数式で1つの列しか取得できません。
しかし、列番号の部分を変えることで複数のセルに異なる列のデータをそれぞれ取得できます。
単価を取得する数式の列番号を「3」から「4」に変えれば在庫数が、「5」に変えればステータスが取得できます。
同じ検索値・同じ範囲で列番号だけ変えた数式を複数用意することで、1商品に関するすべての情報を一覧表示する検索パネルを作ることも可能です。
業務でよく使われる実践的なテクニックなので、ぜひ身につけておきましょう。
【VLOOKUP関数 操作のポイント】
・検索値は必ず範囲の左端列に含まれていなければならない
・範囲は「$」をつけた絶対参照にしてコピー時のずれを防ぐ
・第4引数は基本的に「0」(完全一致)を指定する
・複数列を取得したい場合は列番号だけ変えた数式を並べる
XLOOKUP関数でより柔軟にデータを抽出する方法
XLOOKUPとVLOOKUPの違いと優れた点
XLOOKUP関数は、Excel 2021以降およびMicrosoft 365で使用できる、VLOOKUPの進化版ともいえる関数です。
VLOOKUPでは左端列にしか検索できないという制限がありましたが、XLOOKUPでは検索列と返却列を独立して指定できるため、より自由度の高い抽出が可能です。
XLOOKUP関数の構文
=XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない場合], [一致モード], [検索モード])
・検索値:探したいデータ
・検索範囲:検索をかける列(1列でOK)
・返す範囲:取得したいデータがある列(1列でOK)
・見つからない場合:エラーの代わりに表示する値(省略可)
サンプルデータで「チョコ」の在庫数を取得するには、次のように入力します。
=XLOOKUP(“チョコ”, A2:A7, D2:D7, “該当なし”)
→ A列で「チョコ」を探し、D列の対応する在庫数「30」を返す
XLOOKUPで左側の列を返す逆引き抽出
VLOOKUPでは絶対に実現できなかった「右の列で検索して左の列を返す」操作が、XLOOKUPなら簡単にできます。
たとえば、ステータス列(E列)で「在庫切れ」を検索して、その商品名(A列)を返したい場合は次の数式を使います。
=XLOOKUP(“在庫切れ”, E2:E7, A2:A7, “なし”)
→ E列で「在庫切れ」を検索し、A列の商品名「柏餅」を返す
この「逆引き」とも呼ばれるテクニックは、データの構造に縛られずに自由な検索が可能なXLOOKUPならではの強みです。
なお、同じ条件に複数の行が該当する場合は、最初にヒットした行のデータが返されます。
XLOOKUPで見つからなかった場合のエラー回避
VLOOKUPでは、検索値が見つからない場合に「#N/A」エラーが表示されてしまいます。
このエラーを回避するためには従来IFERRORを組み合わせる必要がありましたが、XLOOKUPでは第4引数に「見つからない場合の表示文字列」を直接指定できます。
=XLOOKUP(H1, A2:A7, C2:C7, “商品が見つかりません”)
→ 検索値がない場合、エラーでなく「商品が見つかりません」と表示
これにより、数式がすっきりして可読性も高まります。
VLOOKUPからXLOOKUPへの乗り換えを検討している方は、まずこの引数の違いだけでも覚えておくと良いでしょう。
【XLOOKUP関数 操作のポイント】
・検索範囲と返す範囲は別々の列を自由に指定できる
・左方向への逆引きもVLOOKUPと違って自然に書ける
・第4引数でエラー時の表示を設定でき、IFERRORが不要になる
・Excel 2021またはMicrosoft 365が必要(旧バージョンでは使用不可)
複数条件でデータを抽出する関数の使い方
IF関数を入れ子(ネスト)にして複数条件を処理する
IF関数を複数の条件に対応させるには、IF関数の中にさらにIF関数を入れる「ネスト(入れ子)」という手法を使います。
たとえばサンプルデータで、カテゴリが「和菓子」かつステータスが「販売中」の商品に「推奨」と表示し、どちらか一方だけ満たす場合は「確認」、どちらも該当しない場合は「対象外」と表示するには次のように書きます。
=IF(AND(B2=”和菓子”,E2=”販売中”),”推奨”,IF(OR(B2=”和菓子”,E2=”販売中”),”確認”,”対象外”))
AND関数は「すべての条件を満たす」、OR関数は「いずれかの条件を満たす」という意味を持ちます。
AND・OR関数をIF関数の論理式部分に組み込むことで、複雑な複数条件の判定を1つの数式で表現できます。
IFS関数で複数条件を見やすく整理する
条件の数が3つ以上になると、IFのネストは数式が複雑になり読みにくくなります。
そんなときに便利なのがIFS関数です。
IFS関数は複数の条件と対応する値をセットで並べて書けるため、ネストよりもはるかにシンプルで見やすい数式が書けます。
=IFS(C2>=400,”高価格帯”,C2>=200,”中価格帯”,C2<200,”低価格帯”)
→ 単価に応じて3段階の価格帯ラベルを自動付与
条件は上から順番に評価されるため、最初に一致した条件の値が返されます。
条件の順番には注意が必要で、範囲の広い条件を先に書くと意図しない結果になることがあります。
SUMIFS・COUNTIFSで複数条件の集計と抽出を組み合わせる
データを「抽出して表示する」だけでなく、「条件を満たすデータの個数を数えたい」「合計を出したい」という場面も多くあります。
こうした集計系の複数条件処理には、COUNTIFS関数とSUMIFS関数が便利です。
カテゴリが「洋菓子」で販売中の商品の数を数える:
=COUNTIFS(B2:B7,”洋菓子”,E2:E7,”販売中”)
カテゴリが「洋菓子」で販売中の単価合計を求める:
=SUMIFS(C2:C7,B2:B7,”洋菓子”,E2:E7,”販売中”)
COUNTIFS・SUMIFSは、条件を何個でも追加できるため、複雑な絞り込み集計に非常に強い関数です。
サンプルデータで上記の数式を使うと、「マシュマロ(200円)」と「チョコ(480円)」が該当し、件数は2件、単価合計は680円と求められます。
【複数条件 操作のポイント】
・AND条件は「AND(条件1,条件2)」の形でIF関数と組み合わせる
・OR条件は「OR(条件1,条件2)」で同様に記述できる
・3つ以上の条件分岐はIFS関数を使うと数式がすっきりする
・集計が目的ならCOUNTIFS・SUMIFSの組み合わせが最も効率的
別シートのデータを参照して条件抽出する方法
別シート参照の基本的な書き方
Excelでは、複数のシートにまたがってデータを管理することが一般的です。
別シートのデータを参照するには、数式の中で「シート名!セル範囲」という形式を使います。
別シート参照の基本書式
=関数名(シート名!セル範囲, …)
例)Sheet2のA1:E7を参照する場合:Sheet2!A1:E7
シート名にスペースや記号が含まれる場合はシングルクォートで囲む
例)’商品マスタ’!A1:E7
たとえば「商品マスタ」というシートにサンプルデータがある場合、現在のシートから商品名を検索するVLOOKUPは次のようになります。
=VLOOKUP(H1,’商品マスタ’!$A$1:$E$7,3,0)
数式の書き方はほとんど同じで、範囲部分の前にシート名とビックリマークを追加するだけです。
別シートでXLOOKUPを使って動的に抽出する
VLOOKUPと同様に、XLOOKUPでも別シート参照が可能です。
「商品マスタ」シートのデータから「チョコ」のステータスを現在のシートに取得するには次のように書きます。
=XLOOKUP(H1,’商品マスタ’!A2:A7,’商品マスタ’!E2:E7,”該当なし”)
XLOOKUPでは検索範囲と返す範囲を別々に指定するため、別シート参照でも直感的に書ける
のが利点です。
VLOOKUPの列番号を数える手間がなく、参照したい列を直接指定できます。
商品マスタ
fx
=XLOOKUP(H1,’商品マスタ’!A2:A7,’商品マスタ’!E2:E7,”該当なし”)
| G | H | |
| 1 | 検索商品名 | チョコ |
| 2 | ステータス | 販売中 |
「商品マスタ」シートを参照し、現在の集計シートへステータスを取得した結果
別シート参照でよくあるエラーと対処法
別シートを参照する際によく起こるエラーの代表例が「#REF!」です。
これはシート名が変わったときや、参照先のシート自体が削除されたときに発生します。
また、シート名にスペースや「/」などの記号が含まれているのに、シングルクォートで囲んでいない場合もエラーになります。
シート名は短くシンプルな名前にしておくと、数式の記述ミスや参照エラーを防ぎやすくなります。
エラーが起きたときは、まずシート名と数式内の記述が一致しているか確認するのが基本です。
【別シート参照 操作のポイント】
・別シート参照は「シート名!セル範囲」の形式で記述する
・シート名にスペース・記号がある場合は’シート名’とシングルクォートで囲む
・絶対参照($記号)を使うと数式コピー時の参照ずれを防げる
・シート名を変更すると数式の参照先も自動更新されるので便利
FILTER関数で条件に合う複数行を一括抽出する方法
FILTER関数の構文と基本的な使い方
VLOOKUP・XLOOKUPが「1行だけ取得する」のに対し、FILTER関数は条件を満たす行をすべてまとめて抽出して表示できる、非常に強力な関数です。
Excel 2021以降またはMicrosoft 365でのみ使用できます。
FILTER関数の構文
=FILTER(配列, 含む, [空の場合])
・配列:抽出したいデータ全体の範囲
・含む:条件式(TRUEの行だけが抽出される)
・空の場合:条件に一致するデータがない場合の表示(省略可)
サンプルデータで「販売中」のすべての商品を抽出するには次のように入力します。
=FILTER(A1:E7, E2:E7=”販売中”, “該当なし”)
→ ステータスが「販売中」の行をすべて抽出して表示
1つの数式を入力するだけで、桜餅・マシュマロ・チョコ・カボチャの4行が自動的に一覧表示されます。
FILTER関数で複数条件を組み合わせて絞り込む
FILTER関数では、条件を「*」(掛け算=AND条件)や「+」(足し算=OR条件)でつなぐことで複数条件に対応できます。
たとえばカテゴリが「洋菓子」かつ「販売中」の商品だけを抽出する場合は次のように書きます。
=FILTER(A1:E7, (B2:B7=”洋菓子”)*(E2:E7=”販売中”), “該当なし”)
→ マシュマロ・チョコの2行が抽出される
「*」でつないだ場合、両方の条件が成立する行のみが抽出対象になります。
これはAND条件と同じ意味で、条件式の積(掛け算)でAND、和(足し算)でORという覚え方がわかりやすいでしょう。
FILTER関数の結果をSORT関数と組み合わせる
FILTER関数で抽出した結果を、さらにSORT関数でソートしたい場面もあるでしょう。
関数を入れ子にすることで、抽出と並び替えを1つの数式で実現できます。
=SORT(FILTER(A1:E7, E2:E7=”販売中”, “該当なし”), 3, 1)
→ 「販売中」の行を抽出し、3列目(単価)の昇順で並び替えて表示
この数式1つで、データの絞り込みと整列が同時に完了します。
手作業でのフィルタリングや並び替えが不要になり、データが更新されると抽出結果も自動で再計算されるのがFILTER関数の最大の魅力といえるかもしれません。
【FILTER関数 操作のポイント】
・FILTER関数はExcel 2021またはMicrosoft 365でのみ使用可能
・AND条件は条件式同士を「*」でつなぐ
・OR条件は条件式同士を「+」でつなぐ
・SORT関数と組み合わせると抽出と並び替えを1行で実現できる
INDEX関数とMATCH関数を組み合わせた高度な抽出
INDEX・MATCH関数が必要になる場面とは
VLOOKUPは便利な反面、「検索列は必ず左端にある」という制約があります。
データ構造の都合上、この制約を満たせない場面ではINDEX関数とMATCH関数の組み合わせが活躍します。
この組み合わせは、どの列で検索してどの列を返すかを完全に自由に指定できるため、柔軟性の面ではVLOOKUP・XLOOKUPに匹敵するほどの表現力を持ちます。
MATCH関数の構文
=MATCH(検索値, 検索範囲, 照合の種類)
→ 検索値が範囲内の何番目にあるかを数値で返す
INDEX関数の構文
=INDEX(配列, 行番号, [列番号])
→ 指定した位置のデータを返す
INDEX+MATCHで商品情報を取得する
サンプルデータでカツオという商品が存在すると仮定し、E列のステータスを元にA列の商品名を返す逆引き操作をINDEX+MATCHで行ってみましょう。
実際のサンプルデータを使って、「在庫切れ」のステータスに対応する商品名を取得するには次のようになります。
=INDEX(A2:A7, MATCH(“在庫切れ”, E2:E7, 0))
→ E列で「在庫切れ」の位置を探し、その行のA列(商品名)を返す
結果:柏餅
MATCH関数が「在庫切れ」は2行目にあると返し、その結果をINDEX関数に渡すことでA2:A7の2番目のデータを取得する、という仕組みです。
2つの関数が連携して動く構造を理解することが、このテクニックをマスターする鍵です。
INDEX・MATCHを横方向の検索に応用する
VLOOKUPは縦方向(行)の検索が基本ですが、INDEX+MATCHは横方向(列)の検索にも対応できます。
ヘッダー行から列名を動的に検索して、その列のデータを取得する方法です。
=INDEX(A1:E7, MATCH(“桜餅”,A1:A7,0), MATCH(“単価(円)”,A1:E1,0))
→ 「桜餅」の行と「単価(円)」の列が交差するセルの値「320」を返す
行のMATCHと列のMATCHを組み合わせることで、縦横両方向の動的な検索が1つの数式で実現します。
大きなデータテーブルでも列番号を手で数える必要がなく、非常に実用的な応用テクニックです。
【INDEX・MATCH 操作のポイント】
・MATCHは「何番目か」という位置情報を返し、INDEXがその位置の値を取得する
・MATCHの第3引数は完全一致の場合「0」を指定する
・行MATCHと列MATCHを組み合わせれば縦横どちらも動的検索が可能
・VLOOKUPより記述は長いが、列の制約がなく自由度が高い
まとめ:エクセルで条件に合うデータを抽出する関数の選び方
この記事では、Excelで条件に合うデータを抽出する代表的な関数を、複数条件・別シート対応・VLOOKUP・XLOOKUP・IFなど幅広く解説しました。
それぞれの関数には得意な場面と苦手な場面があります。
どの関数を使うべきか迷ったときは、次のように選ぶと良いでしょう。
条件に応じて値を切り替えたいだけならIF関数、1行だけ取得したいならVLOOKUP・XLOOKUP、条件に合う複数行を一括抽出したいならFILTER関数、柔軟な位置指定が必要ならINDEX+MATCHが最適です。
目的に合った関数を選ぶことが、Excelデータ管理を劇的に効率化する第一歩といえます。
ぜひ今回のサンプルデータを使って実際に手を動かし、各関数の動きを体感してみてください。
実践を重ねることで、複数条件・別シート参照といった応用操作も自然と使いこなせるようになっていくはずです。