表データから複数条件による複合抽出 (横AND/縦OR)
元の表データから、指定された条件に基づいて該当する行をすべて抽出し、結果として表示する一連の処理を行います。
これは、Excelの拡張フィルター(フィルターオプション)機能が持つ「横方向は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条件
・各行の縦(3行目、4行目…)はOR条件
※抽出条件のセルが空白の場合、ワイルドカードとして、その列の条件は「条件なし(すべて合致)」として扱います。
| 条件 | 支店 | 部 | 課 | 意味 |
| 条件1 | 東京 | 営業 | 営業二課 | 「東京」かつ「営業」かつ「営業二課」に完全に合致するデータを抽出します。(横3列すべてがAND条件) |
| 条件2 | 開発 | 「部」が「開発」のデータを抽出します。(支店・課のセルが空白なので、支店と課はワイルドカード(全てに合致)となります) | ||
| 条件3 | システム課 | 「課」が「システム課」のデータを抽出します。(支店・部のセルが空白なので、これらはワイルドカード(全てに合致)となります) | ||
| 条件4 | 名古屋 | 人事課 | 「名古屋」かつ「人事課」のデータを抽出します。(部のセルが空白なので、部はワイルドカード(全てに合致)となります) |
条件1~条件4は、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))
)
))
)
))
)
)
)
)数式の説明
- 処理の目的
この数式は、元の大きな表のデータから、指定された条件表(G列からI列)に従って、合致するデータ行を一つ残らず見つけ出し、その結果を表として、数式を入力した場所(K2セル以降)に表示することを目指しています。 - 数式内の「定義」と「準備」
まず、処理を始めるために、数式内で使う「主役のデータ」と「ルールブック(条件)」を明確に区別して準備しています。- データ全体: 元になる「支店、部、課、担当、金額」が書かれた大きな表全体を指します。
- 条件リスト: G列からI列に書かれた、あなたが定めた「絞り込みのルール」の表全体を指します。
- 複雑な条件のチェック(ANDとOR)
データの一つ一つの行が、抽出して良いかどうかをチェックする際に、以下の二つのステップで判断します。- A. 第一のチェック:横の条件(すべて満たす AND)
条件リストの一行ずつに着目します。例えば、「東京」「営業」「営業二課」のように、横に並んだすべての条件を、元のデータが同時に満たしているかを確認します。
「支店」の条件を満たし、かつ「部」の条件を満たし、かつ「課」の条件を満たしているか、を細かくチェックします。 - B. 第二のチェック:縦の条件(どれか一つ OR)
元のデータ行は、条件リストの複数の行(縦に並んだ条件)のうち、どれか一つでも満たせば、合格となります。
例えば、データ行が「東京の条件」に合格または「開発の条件」に合格または「システム課の条件」に合格すれば、抽出対象となります。
- A. 第一のチェック:横の条件(すべて満たす AND)
- 空白セルに対する特別な配慮
条件リストの「部」の欄などが空白になっている場合(例:「名古屋」と「人事課」の間)、これは「部についてはどんな名前でも構いません」という特別な指示(ワイルドカード)として認識されます。この空白セルを「条件なし」として正しく処理する仕組みが、数式の中に組み込まれています。 - 最終的な結果の表示
これらの複雑なチェックを、元の表のすべてのデータ行に対して実行した後、最終的に「合格」したデータ行だけを、数式を入れた場所(K2セル以降)にまとめて、自動的かつきれいに表として表示(出力)します。
同じテーマ「エクセル関数応用」の記事
QRコード、バーコード作成の覚え書き
GROUPBY関数が最強すぎる!Excelの集計作業が爆速に!
セル参照を戻り値とする関数
REDUCE+VSTACKが遅い理由と解決策
HSTACKは速い?遅い?実際に試してみた結果
条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
複数列の直積(デカルト積、クロスジョイン)
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
表データから複数条件による複合抽出 (横AND/縦OR)
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
