Excel関数 逆引き集 | 条件付き中央値 → MEDIAN+FILTER

Excel VBA Excel
スポンサーリンク

概要

「田中さんの売上の“中央値”だけ知りたい」
「東京支店の売上の“真ん中の値”を見たい」
「極端に大きい/小さい値に左右されない代表値が欲しい」

こういうときに使うのが 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="東京")
)

中で起きていることを分解すると、

  1. FILTER が「A列が東京の行の B列(売上)だけ」を取り出す
  2. その“抽出された 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)),
  "該当なし"
)

まとめ

条件付き中央値は専用関数が無いので、

  1. FILTER で「条件を満たす行だけ」の数値を抜き出し
  2. その結果に MEDIAN をかける

という 2 段構えで実現します。

基本パターンは次の 2 つを押さえておくと十分です。

=MEDIAN(FILTER(数値範囲, 条件式))

=IFERROR(
  MEDIAN(FILTER(数値範囲, 条件式)),
  "該当なし"
)

SUMIFS や AVERAGEIFS に慣れてきたら、
「中央値バージョン=MEDIAN+FILTER」と覚えておくと、
“外れ値に強い代表値”がほしい場面で一段レベルの高い分析ができるようになります。

タイトルとURLをコピーしました