概要
「田中さんの売上の“中央値”だけ知りたい」
「東京支店の売上の“真ん中の値”を見たい」
「極端に大きい/小さい値に左右されない代表値が欲しい」
こういうときに使うのが MEDIAN(中央値) ですが、
残念ながら「SUMIFS や AVERAGEIFS のような“条件付き MEDIAN 関数”」はありません。
そこで出番になるのが MEDIAN + FILTER の組み合わせです。
「FILTER で条件に合うデータだけを抜き出して、その集合に対して MEDIAN をかける」
という考え方で、“条件付き中央値”を実現します。
MEDIAN の基本(まずは素の中央値から)
MEDIAN の書式とイメージ
書式はとてもシンプルです。
=MEDIAN(数値1, [数値2], [数値3], …)
または、範囲で指定することもできます。
=MEDIAN(B2:B100)
MEDIAN が返すのは「値を小さい順に並べたときの“真ん中の値”」です。
例えば、点数が
50, 60, 100
なら中央値は 60。
50, 60, 80, 100
のように偶数個のときは、真ん中2つの平均(ここでは 60 と 80 → 70)になります。
平均値(AVERAGE)は極端な値に引っ張られやすいですが、
中央値(MEDIAN)は外れ値の影響を受けにくい、という特徴があります。
FILTER の基本(条件で行を絞り込む)
FILTER の書式とイメージ
FILTER は「条件を満たす行だけを抜き出す関数」です。
基本形はこうです。
=FILTER(配列, 条件式)
例えば、A2:A100 に支店名、B2:B100 に売上が入っていて、
「支店が東京の売上だけを抜き出す」ならこうなります。
=FILTER(B2:B100, A2:A100="東京")
この結果は、「東京支店の売上だけが並んだ“仮想の一覧”」だと思ってください。
この“絞り込まれた一覧”に対して MEDIAN をかける、というのが今回の発想です。
条件付き中央値の基本形(MEDIAN+FILTER)
支店が東京の売上の中央値
A列:支店名
B列:売上
「東京支店の売上の“中央値”」を出したいときの定番形はこれです。
=MEDIAN(
FILTER(B2:B100, A2:A100="東京")
)
中で起きていることを分解すると、
- FILTER が「A列が東京の行の B列(売上)だけ」を取り出す
- その“抽出された B 列”を MEDIAN がまとめて受け取り、中央値を計算する
という流れです。
つまり、SUMIFS や AVERAGEIFS のように
「一発で条件付き中央値を計算する関数」は無いので、
「条件で抜き出す → その結果に MEDIAN」を自作しているイメージです。
複数条件付き中央値(AND 条件)
担当者=田中 かつ 支店=東京 の売上中央値
A列:担当者
B列:支店
C列:売上
「担当者が田中 かつ 支店が東京」の売上の中央値を求めたい場合。
=MEDIAN(
FILTER(
C2:C100,
(A2:A100="田中") * (B2:B100="東京")
)
)
ポイントは、条件式の部分です。
(A2:A100=”田中”) は TRUE / FALSE の配列。
(B2:B100=”東京”) も TRUE / FALSE の配列。
これを掛け算すると、「両方 TRUE のときだけ 1(=TRUE)」になります。
つまり、AND 条件を掛け算で表現しています。
FILTER は「TRUE の行だけを通す」ので、
結果として「担当者が田中 かつ 支店が東京」の行だけが C列から抜き出され、
その集合に MEDIAN がかかります。
数値条件付き中央値(しきい値付き)
売上が 100,000 以上の行だけの中央値
B列:売上
「売上が 100,000 以上の売上だけの中央値」を出したいときは、こうなります。
=MEDIAN(
FILTER(B2:B100, B2:B100>=100000)
)
条件式 B2:B100>=100000 が TRUE になった行だけが FILTER で抽出され、
その集合に対して MEDIAN が実行されます。
文字+数値の複合条件付き中央値
担当者=田中 かつ 売上が 100,000 以上の中央値
A列:担当者
B列:売上
「担当者が田中 かつ 売上が 100,000 以上」の売上中央値を出す例です。
=MEDIAN(
FILTER(
B2:B100,
(A2:A100="田中") * (B2:B100>=100000)
)
)
条件を掛け算することで「両方を満たす行だけ」を抜き出し、その中の中央値を求めています。
セル参照を使って条件を可変にする
条件をセルから指定して中央値を切り替える
A列:担当者
B列:売上
E2:担当者名(入力用セル)
「E2 に入力された担当者の売上中央値」を出す場合はこうです。
=MEDIAN(
FILTER(B2:B100, A2:A100=E2)
)
E2 を「田中」「佐藤」などに変えるだけで、担当者ごとの中央値を簡単に見比べられます。
条件付き中央値でよくある注意点
該当データが 1 件もないとエラーになる
FILTER は、条件を満たす行が 1 つもないとエラーになります。
それに MEDIAN をかけると当然エラーになるので、実務では IFERROR と組み合わせることが多いです。
=IFERROR(
MEDIAN(FILTER(B2:B100, A2:A100="東京")),
"該当なし"
)
「東京支店のデータが 1 件もない」場合は「該当なし」と表示されます。
FILTER が使えないバージョンではこの方法は不可
MEDIAN+FILTER は、「動的配列関数」が使える Excel(Microsoft 365 など)が前提です。
古いバージョンでは FILTER がないため、このやり方はそのまま使えません。
その場合は、別セルに「抽出列」を作るなど、別手段が必要になります。
例題
問題1
A2:A100 に支店名、B2:B100 に売上が入っています。
「支店が東京」の売上の中央値を求める MEDIAN+FILTER の式を書いてください。
=MEDIAN(FILTER(B2:B100, A2:A100="東京"))
問題2
A2:A100 に担当者名、B2:B100 に売上が入っています。
「担当者が田中」の売上の中央値を求める式を書いてください。
=MEDIAN(FILTER(B2:B100, A2:A100="田中"))
問題3
B2:B100 に売上が入っています。
「売上が 100,000 以上」の行だけを対象にした売上中央値を求める式を書いてください。
=MEDIAN(FILTER(B2:B100, B2:B100>=100000))
問題4
A2:A100 に担当者名、B2:B100 に売上が入っています。
「担当者が田中 かつ 売上が 100,000 以上」の売上中央値を求める式を書いてください。
=MEDIAN(
FILTER(
B2:B100,
(A2:A100="田中") * (B2:B100>=100000)
)
)
問題5
A2:A100 に担当者名、B2:B100 に売上が入っています。
E2 に担当者名が入力されているとき、
「E2 の担当者の売上中央値」を求める MEDIAN+FILTER の式を書いてください。
該当データがないときは「該当なし」と表示してください。
=IFERROR(
MEDIAN(FILTER(B2:B100, A2:A100=E2)),
"該当なし"
)
まとめ
条件付き中央値は専用関数が無いので、
- FILTER で「条件を満たす行だけ」の数値を抜き出し
- その結果に MEDIAN をかける
という 2 段構えで実現します。
基本パターンは次の 2 つを押さえておくと十分です。
=MEDIAN(FILTER(数値範囲, 条件式))
=IFERROR(
MEDIAN(FILTER(数値範囲, 条件式)),
"該当なし"
)
SUMIFS や AVERAGEIFS に慣れてきたら、
「中央値バージョン=MEDIAN+FILTER」と覚えておくと、
“外れ値に強い代表値”がほしい場面で一段レベルの高い分析ができるようになります。
