条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
条件付き○○関数はいくつかあります。
古くから存在するのは、
COUNTIF関数
Excel2007で導入されたのが、
COUNTIFS関数
AVERAGEIF関数
AVERAGEIFS関数
Excel2019で導入されたのが、
MINIFS関数
意外と少ないし、案外近年までサポートされませんでした。
中央値のMEDIAN関数には、条件付き関数は存在しません。
最終的には、LAMBDA関数を使って汎用の条件付き○○関数を作成します。
ページ内目次
MEDIAN関数+IF関数
MEDIAN関数+FILTER関数
MEDIAN関数+FILTER関数+LAMBDA関数
LAMBDA関数+イータ縮小ラムダでさらなる汎用化
説明に使用したサンプルデータについて

| 項目1 | 項目2 | 項目3 | 数値 |
| a1 | b1 | c1 | 1 |
| a1 | b1 | c1 | 1 |
| a1 | b1 | c1 | 2 |
| a1 | b1 | c1 | 2 |
| a1 | b1 | c2 | 3 |
| a1 | b2 | c2 | 6 |
| a1 | b2 | c2 | 4 |
| a1 | b2 | c2 | 4 |
| a1 | b2 | c2 | 5 |
| a1 | b2 | c2 | 5 |
| a1 | b2 | c3 | 9 |
| a1 | b2 | c3 | 9 |
| a1 | b2 | c3 | 7 |
| a2 | b1 | c1 | 1 |
| a2 | b1 | c2 | 2 |
| a2 | b2 | c2 | 2 |
| a2 | b2 | c2 | 3 |
| a2 | b2 | c2 | 3 |
| a2 | b2 | c3 | 1 |
| a2 | b2 | c3 | 1 |
MEDIAN関数+IF関数
A列の値が"a1"の行の中央値


ただし、これはスピル以前からの伝統的な配列数式です。
データ量が多い場合に計算が遅くなる原因となります。
Excel2019以降では次のFILTER関数を使うことをお勧めします。
MEDIAN関数+FILTER関数
FILTER関数
FILTER関数(範囲をフィルター処理)
複数条件のフィルターでは、
AND条件は、*演算子を使い、(条件1)*(条件2)とします。
OR条件は、+演算子を使い、(条件1)+(条件2)とします。

G2=MEDIAN(F2#)
H2=MEDIAN(FILTER(D:D,(A:A="a1")*(B:B="b2")*(C:C="c2")))
G2では、MEDIAN関数にFILTER関数で絞り込まれたデータを入れています。
H2では、F2とG2の数式をネストして1つの数式にしています。
MEDIAN関数+FILTER関数+LAMBDA関数
LAMBDA関数
LAMBDA関数(カスタム関数の作成)

=LAMBDA(対象範囲,条件範囲1,条件1,条件範囲2,条件2,条件範囲3,条件3,
MEDIAN(
FILTER(
対象範囲,
(条件範囲1=条件1)*(条件範囲2=条件2)*(条件範囲3=条件3)))
)(D:D,A:A,"a1",B:B,"b2",C:C,"c2")LAMBDA関数の部分は、名前定義に登録することで、カスタム関数として使い回せるようになります。
そこで、条件数が変わってもそのまま使えるようにします。
省略されているかを判定するには、ISOMITTED関数で使用します。
=LAMBDA(対象範囲,条件範囲1,条件1,[条件範囲2],[条件2],[条件範囲3],[条件3],
MEDIAN(
FILTER(
対象範囲,
(条件範囲1=条件1) *
(IF(ISOMITTED(条件範囲2), TRUE, 条件範囲2=条件2)) *
(IF(ISOMITTED(条件範囲3), TRUE, 条件範囲3=条件3))
)
)
)(D:D,A:A,"a1",B:B,"b2",C:C,"c2")このLAMBDAの部分を名前定義に登録してカスタム関数にできます。




ここまでで条件付き関数をLAMBDA化しました。
次はさらに汎用化するために、"関数そのもの"を引数として渡す方法を紹介します。
LAMBDA関数+イータ縮小ラムダでさらなる汎用化
イータ縮小ラムダ
ここでの「関数」はイータ縮小ラムダになります。
=LAMBDA(関数,対象範囲,条件範囲1,条件1,[条件範囲2],[条件2],[条件範囲3],[条件3],
関数(
FILTER(
対象範囲,
(条件範囲1=条件1) *
(IF(ISOMITTED(条件範囲2),TRUE,条件範囲2=条件2)) *
(IF(ISOMITTED(条件範囲3),TRUE,条件範囲3=条件3))))
)(MEDIAN,D:D,A:A,"a1",B:B,"b2",C:C,"c2")

「関数」にFILTERの結果を入れているので、FILTERの結果だけを引き受けて処理できる関数なら何の関数でも指定できます。

「GIFS」で登録してみます。



同じテーマ「エクセル関数応用」の記事
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.
