エクセル関数応用
条件付きMEDIAN関数を作る
LAMBDA関数で汎用〇〇IFSを実現

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

条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現


条件付き○○関数はいくつかあります。
古くから存在するのは、

SUMIF関数
COUNTIF関数

Excel2007で導入されたのが、

SUMIFS関数
COUNTIFS関数
AVERAGEIF関数
AVERAGEIFS関数

Excel2019で導入されたのが、

MAXIFS関数
MINIFS関数

意外と少ないし、案外近年までサポートされませんでした。
中央値のMEDIAN関数には、条件付き関数は存在しません。

・平均値 ・中央値:MEDIAN関数 ・最頻値:MODE関数
そこで、この記事では、各種方法で条件付きMEDIAN関数を作成して行きます。
最終的には、LAMBDA関数を使って汎用の条件付き○○関数を作成します。
・LAMBDA関数の構文 ・LAMBDA関数をセルで使う場合の基本 ・LAMBDA関数の「数式の検証」について ・LAMBDA関数をセルで使う場合の使用例 ・パラメーターの省略について ・LAMBDA関数を名前定義に登録 ・再帰関数の作成 ・LET関数内でLAMBDA関数を使用する ・LAMBDA関数にLAMBDA関数を渡す ・LAMBDA関数のネストと変数のスコープ(適用範囲) ・遅延評価によりLAMBDA関数オブジェクト(関数値)を返すことができる関数 ・LAMBDAヘルパー関数について

ページ内目次

説明に使用したサンプルデータについて

以下のデータを使用しています。

MEDIANIFS関数を作成:汎用○○IFS関数
項目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関数

○○IFS関数が無い場合は、以下のようにIF関数と組み合わせることで実現することはできます。
A列の値が"a1"の行の中央値
=MEDIAN(IF(A:A="a1",D:D))

A列の値が"a1"かつB列の値が"b2"の行の中央値
複数条件の場合は、AND関数を使ってしまうと上手くいきません。

=MEDIAN(IF(AND(A:A="a1",B:B="b2"),D:D))← ×

MEDIANIFS関数を作成:汎用○○IFS関数

これは真偽値の掛け算にします。

=MEDIAN(IF((A:A="a1")*(B:B="b2"),D:D))

MEDIANIFS関数を作成:汎用○○IFS関数

このように、IF関数と組み合わせることで、条件付きMEDIANを実現できています。
ただし、これはスピル以前からの伝統的な配列数式です。
データ量が多い場合に計算が遅くなる原因となります。
Excel2019以降では次のFILTER関数を使うことをお勧めします。


MEDIAN関数+FILTER関数

FILTER関数

構文等の詳細については以下を参照してください。
FILTER関数(範囲をフィルター処理)
・FILTER関数の書式 ・FILTER関数使用例のサンプルデータ ・FILTER関数の基本 ・空白セルを0ではなく空白にする場合 ・複数条件のフィルター ・関数を使ってフィルター ・横(列)でフィルター ・表示する列を選択する ・FILTER関数の結果を他の関数で使う ・スピルによって新しく追加された関数

複数条件のフィルターでは、
AND条件は、*演算子を使い、(条件1)*(条件2)とします。
OR条件は、+演算子を使い、(条件1)+(条件2)とします。

MEDIANIFS関数を作成:汎用○○IFS関数

F2=FILTER(D:D,(A:A="a1")*(B:B="b2")*(C:C="c2"))
G2=MEDIAN(F2#)
H2=MEDIAN(FILTER(D:D,(A:A="a1")*(B:B="b2")*(C:C="c2")))

F2では、FILTER関数で対象データを絞り込んで出力しています。
G2では、MEDIAN関数にFILTER関数で絞り込まれたデータを入れています。
H2では、F2とG2の数式をネストして1つの数式にしています。


MEDIAN関数+FILTER関数+LAMBDA関数

LAMBDA関数

構文等の詳細については以下を参照してください。
LAMBDA関数(カスタム関数の作成)
・LAMBDA関数の構文 ・LAMBDA関数をセルで使う場合の基本 ・LAMBDA関数の「数式の検証」について ・LAMBDA関数をセルで使う場合の使用例 ・パラメーターの省略について ・LAMBDA関数を名前定義に登録 ・再帰関数の作成 ・LET関数内でLAMBDA関数を使用する ・LAMBDA関数にLAMBDA関数を渡す ・LAMBDA関数のネストと変数のスコープ(適用範囲) ・遅延評価によりLAMBDA関数オブジェクト(関数値)を返すことができる関数 ・LAMBDAヘルパー関数について

MEDIANIFS関数を作成:汎用○○IFS関数

=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関数の使用方法としては、名前定義を使わずにセルに直接入れています。
LAMBDA関数の部分は、名前定義に登録することで、カスタム関数として使い回せるようになります。

LAMBDA関数に与える値(条件)の増減に応じて、LAMBDA関数内を書き換える必要があります。
そこで、条件数が変わってもそのまま使えるようにします。

LAMBDA関数における省略可能なパラメーターの指定方法
省略可能な引数とするには、引数名を角括弧[ ]で囲みます。
省略されているかを判定するには、ISOMITTED関数で使用します。
・ISOMITTED関数の構文 ・ISOMITTEDの基本動作 ・ISOMITTED関数の使用例と解説

そこで、上記の数式の「条件範囲2」以降を省略可能なパラメーターにします。

=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")
このようにしておけば、条件が1個~3個まで、LAMBDA数式を変更することなく使用できます。
このLAMBDAの部分を名前定義に登録してカスタム関数にできます。

MEDIANIFS関数を作成:汎用○○IFS関数

MEDIANIFS関数を作成:汎用○○IFS関数

MEDIANIFS関数を作成:汎用○○IFS関数
MEDIANIFS関数を作成:汎用○○IFS関数

このようにLAMBDA関数を使用することでカスタム関数化し、かつ、引数の可変化にも対応できるようになります。
ここまでで条件付き関数をLAMBDA化しました。
次はさらに汎用化するために、"関数そのもの"を引数として渡す方法を紹介します。


LAMBDA関数+イータ縮小ラムダでさらなる汎用化

イータ縮小ラムダ

詳細については以下を参照してください。
イータ縮小ラムダ(eta reduced 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")

MEDIANIFS関数を作成:汎用○○IFS関数

上記の数式では、使用している「MEDIAN」は別の関数に変更して使うことができます。

MEDIANIFS関数を作成:汎用○○IFS関数

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

MEDIANIFS関数を作成:汎用○○IFS関数

このLAMBDAを名前定義に入れて使用することもできます。
「GIFS」で登録してみます。

MEDIANIFS関数を作成:汎用○○IFS関数

MEDIANIFS関数を作成:汎用○○IFS関数

MEDIANIFS関数を作成:汎用○○IFS関数




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

セル参照を戻り値とする関数
REDUCE+VSTACKが遅い理由と解決策
HSTACKは速い?遅い?実際に試してみた結果
条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
複数列の直積(デカルト積、クロスジョイン)
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
表データから複数条件による複合抽出 (横AND/縦OR)
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン


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

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|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」をお願いいたします。
本文下部へ