エクセル関数応用
表データから複数条件による複合抽出 (横AND/縦OR)

Excel関数の解説、関数サンプルと高等テクニック
公開日:2025-10-25 最終更新日:2025-10-25

表データから複数条件による複合抽出 (横AND/縦OR)


元の表データから、指定された条件に基づいて該当する行をすべて抽出し、結果として表示する一連の処理を行います。
これは、Excelの拡張フィルター(フィルターオプション)機能が持つ「横方向はAND、縦方向はOR」という複合条件ロジックを再現したものです。



元表データ

表データから複数条件による複合抽出 (横AND/縦OR)
支店 担当 金額
東京 営業 営業一課 佐藤 319,000
東京 営業 営業二課 渡辺 623,000
東京 営業 営業三課 小林 486,000
東京 開発 研究課 佐藤 405,000
東京 総務 経理課 田中 591,000
大阪 営業 営業一課 小林 390,000
大阪 営業 営業二課 田中 289,000
大阪 開発 システム課 渡辺 281,000
大阪 開発 研究課 山本 122,000
大阪 総務 経理課 田中 168,000
名古屋 営業 営業一課 佐藤 524,000
名古屋 営業 営業二課 小林 546,000
名古屋 開発 システム課 渡辺 591,000
名古屋 総務 経理課 佐藤 271,000
名古屋 総務 人事課 山本 162,000
福岡 営業 営業一課 中村 683,000
福岡 営業 営業二課 中村 91,000
福岡 開発 システム課 小林 106,000
福岡 開発 研究課 中村 277,000
福岡 総務 人事課 山本 78,000

抽出条件の詳細仕様

表データから複数条件による複合抽出 (横AND/縦OR)

G3:I3以降の全てのデータに対して、
・各行の横(支店、部、課)はAND条件
・各行の縦(3行目、4行目…)はOR条件
※抽出条件のセルが空白の場合、ワイルドカードとして、その列の条件は「条件なし(すべて合致)」として扱います。

条件 支店 意味
条件1 東京 営業 営業二課 「東京」かつ「営業」かつ「営業二課」に完全に合致するデータを抽出します。(横3列すべてがAND条件)
条件2 開発 「部」が「開発」のデータを抽出します。(支店・課のセルが空白なので、支店と課はワイルドカード(全てに合致)となります)
条件3 システム課 「課」が「システム課」のデータを抽出します。(支店・部のセルが空白なので、これらはワイルドカード(全てに合致)となります)
条件4 名古屋 人事課 「名古屋」かつ「人事課」のデータを抽出します。(部のセルが空白なので、部はワイルドカード(全てに合致)となります)

条件1~条件4は、OR条件になります。

抽出結果

上記条件で注した場合の結果です。

表データから複数条件による複合抽出 (横AND/縦OR)


複数条件による複合抽出 (横AND/縦OR) の数式

この数式は極めて複雑です。
下記数式はあくまで1例であり、この複雑な処理を実現する数式は無数に存在するといってよいでしょう。
ぜひ一度挑戦してみたください。

=LET(tbl,DROP(A:.E,1),crt,DROP(G:I,1),
  FILTER(
    tbl,
    BYROW(tbl,
      LAMBDA(x,
        OR(BYROW(FILTER(crt,BYROW(crt,COUNTA)),
          LAMBDA(y,
            AND(MAP({1,2,3},
              LAMBDA(z,
                IF(INDEX(y,1,z)="",TRUE,INDEX(x,1,z)=INDEX(y,1,z))
              )
            ))
          )
        ))
      )
    )
  )
)

数式の説明
この数式は、エクセルの中で、あなたが指定した「複雑な絞り込みの条件」をすべて正確に満たすデータだけを、自動で見つけ出してリストアップする専門家のような役割を果たしています。
  1. 処理の目的
    この数式は、元の大きな表のデータから、指定された条件表(G列からI列)に従って、合致するデータ行を一つ残らず見つけ出し、その結果を表として、数式を入力した場所(K2セル以降)に表示することを目指しています。

  2. 数式内の「定義」と「準備」
    まず、処理を始めるために、数式内で使う「主役のデータ」と「ルールブック(条件)」を明確に区別して準備しています。
    • データ全体: 元になる「支店、部、課、担当、金額」が書かれた大きな表全体を指します。
    • 条件リスト: G列からI列に書かれた、あなたが定めた「絞り込みのルール」の表全体を指します。

  3. 複雑な条件のチェック(ANDとOR)
    データの一つ一つの行が、抽出して良いかどうかをチェックする際に、以下の二つのステップで判断します。
    • A. 第一のチェック:横の条件(すべて満たす AND)
      条件リストの一行ずつに着目します。例えば、「東京」「営業」「営業二課」のように、横に並んだすべての条件を、元のデータが同時に満たしているかを確認します。
      「支店」の条件を満たし、かつ「部」の条件を満たし、かつ「課」の条件を満たしているか、を細かくチェックします。

    • B. 第二のチェック:縦の条件(どれか一つ OR)
      元のデータ行は、条件リストの複数の行(縦に並んだ条件)のうち、どれか一つでも満たせば、合格となります。
      例えば、データ行が「東京の条件」に合格または「開発の条件」に合格または「システム課の条件」に合格すれば、抽出対象となります。

  4. 空白セルに対する特別な配慮
    条件リストの「部」の欄などが空白になっている場合(例:「名古屋」と「人事課」の間)、これは「部についてはどんな名前でも構いません」という特別な指示(ワイルドカード)として認識されます。この空白セルを「条件なし」として正しく処理する仕組みが、数式の中に組み込まれています。

  5. 最終的な結果の表示
    これらの複雑なチェックを、元の表のすべてのデータ行に対して実行した後、最終的に「合格」したデータ行だけを、数式を入れた場所(K2セル以降)にまとめて、自動的かつきれいに表として表示(出力)します。




同じテーマ「エクセル関数応用」の記事

条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
複数列の直積(デカルト積、クロスジョイン)
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
表データから複数条件による複合抽出 (横AND/縦OR)
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン
「SUMIFSで動くのにXLOOKUPでエラー?」型不一致の関数別挙動
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化


新着記事NEW ・・・新着記事一覧を見る

ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ