スプレッドシートのTRIMMEAN関数|外れ値を除いた平均の出し方

スポンサーリンク

「スプレッドシートで平均を出したのに、なんだか実感とずれている」。そんな経験はありませんか?

AVERAGE関数は、すべての値を同じ重みで足し合わせます。極端に大きい値が1件あるだけで、平均はぐっと上に引っ張られてしまうもの。かといって外れ値を手で消すと、「どれを消したのか」を後から説明しにくくなります。

そこで役立つのが、スプレッドシートのTRIMMEAN関数です。データの上下の端から決まった割合を外し、残りの値で平均を出してくれます。

ただし、割合の指定にはちょっとしたクセがあります。「0.1を指定したのに何も外れていない」というのもよくある話です。

この記事では、何個外れるかの決まり方を早見表と検算式で整理しました。FILTERとの組み合わせや、AVERAGE・MEDIANとの使い分けもあわせて紹介します。

スプレッドシートのTRIMMEAN関数とは?外れ値を除いた平均を求める関数

TRIMMEAN関数(読み方: トリムミーン)は、データの上端と下端を同じ個数ずつ外してから平均を求める関数です。名前は英語の「Trimmed Mean(刈り込んだ平均)」に由来します。

スプレッドシートでは、売上や作業時間、審査の採点など、外れ値が混ざりやすい集計で活躍します。極端な値を自動で外してくれるので、行を手作業で消す必要はありません。

構文と引数(=TRIMMEAN(データ, 割合))

=TRIMMEAN(データ, 割合)
引数内容指定の例
データ平均を出したいセル範囲や配列A2:A11、A2:A、FILTERの結果
割合両端から外すデータの割合(上下の合計)0.2、20%(0以上1未満)

いちばん誤解されやすいのが「割合」の意味です。これは上下を合わせた合計の割合で、0.2なら上側10%と下側10%を外します。「上下それぞれ20%ずつ」ではない点に注意しましょう。

割合に指定できるのは0以上1未満の値です。スプレッドシートで試すと、1や-0.1を指定したセルは#NUM!エラーになりました。0を指定した場合は何も外さず、AVERAGEと同じ結果が返ります。

AVERAGEとの結果の違いを10件のデータで確認

問い合わせ対応にかかった時間(分)を10件記録した表で比べてみます。1件だけ、200分まで長引いた対応が混ざっている状態です。

行A列:対応時間(分)B列:拠点
250東京
360大阪
462東京
565大阪
668東京
770大阪
872東京
975大阪
1080東京
11200大阪
=AVERAGE(A2:A11)        → 80.2
=TRIMMEAN(A2:A11, 0.2)  → 69

AVERAGEは200分の1件に引っ張られ、80.2分になりました。10件中9件は80分以下なので、実感より高めの数字です。

TRIMMEANで割合を0.2にすると、10×0.2=2個が外れます。最小の50と最大の200が1個ずつ外れ、残り8件の平均は69分。こちらのほうが「ふだんの対応時間」に近い値といえるでしょう。

通常の平均の求め方は、スプレッドシートのAVERAGE関数の使い方で詳しく解説しています。

何個除外される?割合と除外個数の決まり方

TRIMMEANを使いこなすカギは、「実際に何個外れたか」を把握することです。ここを押さえておけば、上司や同僚に結果の根拠を聞かれても困りません。

除外個数の計算ルール(件数×割合→偶数に切り下げ→上下に半分ずつ)

外れる個数は、次の3ステップで決まります。

  1. データの件数×割合を計算する
  2. その値を偶数に切り下げる(2.4なら2、3なら2、1なら0)
  3. 切り下げた個数を、上と下に半分ずつ割り振る

上下で同じ個数を外すため、合計は必ず偶数です。先ほどの10件のデータで割合だけを変えると、結果は次のようになりました。

式件数×割合外れた個数(合計)結果
=TRIMMEAN(A2:A11, 0.1)10個80.2
=TRIMMEAN(A2:A11, 0.15)1.50個80.2
=TRIMMEAN(A2:A11, 0.2)22個(上下1個ずつ)69
=TRIMMEAN(A2:A11, 0.25)2.52個(上下1個ずつ)69
=TRIMMEAN(A2:A11, 0.3)32個(上下1個ずつ)69

割合0.1では、10×0.1=1が0に切り下げられます。そのため結果はAVERAGEと同じ80.2のまま。0.3でも3が2に切り下げられ、0.2のときと結果は変わりません。

この動きは、Excelの公式説明にある「2の倍数に切り下げる」規則と同じです。Googleのヘルプには切り下げ規則の記載が見当たりません。ここでは、スプレッドシートで動かして確かめた規則として紹介しています。

データ件数×割合の早見表

件数と割合の組み合わせごとに、外れる個数の合計を上の規則で計算しました。( )内は上下それぞれの個数です。

件数\割合0.10.20.250.3
5件0000
8件002(1)2(1)
10件02(1)2(1)2(1)
12件02(1)2(1)2(1)
20件2(1)4(2)4(2)6(3)
30件2(1)6(3)6(3)8(4)

太字の0は、何も外れずAVERAGEと同じ結果になるマスです。5件のデータでは、0.3を指定しても1個も外れません。

目安として、割合0.1で上下1個ずつ外すには20件以上が必要です。0.2なら10件以上。件数が少ない表ほど、割合を大きめにしないと効果が出ないと覚えておきましょう。

除外個数を確かめる検算式

「本当に外れているのか」が気になるときは、隣のセルに検算式を置いておくと安心です。

=INT(COUNT(A2:A11)*0.2/2)*2   → 外れる個数の合計(2)
=INT(COUNT(A2:A11)*0.2/2)     → 上下それぞれの個数(1)

COUNTは、範囲の中の数値だけを数える関数です。TRIMMEANも空白や文字列を無視して計算するため、COUNTの件数と計算対象の件数がそろいます。

割合をセル(例: D1)に入れておく方法もおすすめ。=INT(COUNT(A2:A11)D1/2)2 とすれば、割合を変えたときの除外個数がすぐわかります。結果が0なら、その割合では何も外れていません。

上下1個ずつ外したいときの割合の決め方

「最高と最低を1個ずつ外したい」なら、割合を件数から逆算しましょう。おすすめは次の式です。

=TRIMMEAN(範囲, 2.5/COUNT(範囲))

件数×割合がちょうど2.5になり、偶数に切り下げられて2個(上下1個ずつ)が外れる仕組みです。件数が3件以上であれば、行が増減しても上下1個ずつの除外が保たれます。なお件数が2件だと割合が1を超え、#NUM!になる点に注意。

「2/件数」でもよさそうに見えますが、ここに落とし穴があります。スプレッドシートで、49件に2/49、98件に2/98を指定して試しました。すると1個も外れず、AVERAGEと同じ値が返ったのです。

原因は小数の計算誤差です。49×(2/49)が内部では2ぴったりにならず、わずかに2を下回って0に切り下げられてしまいます。ちょうど2を狙わず、2.5のように余裕を持たせた値を使うのが確実です。

実務での使い方

審査・アンケートの採点で最高点と最低点を外す

社内コンテストのプレゼン審査で、審査員7人が10点満点で採点したケースを見てみましょう。1人だけ、極端に辛い3点をつけています。

行A列:審査員B列:点数
2審査員17
3審査員28
4審査員38
5審査員49
6審査員59
7審査員68
8審査員73
=AVERAGE(B2:B8)                      → 約7.43
=TRIMMEAN(B2:B8, 2.5/COUNT(B2:B8))   → 8

AVERAGEは3点に引っ張られて約7.43点になりました。TRIMMEANは最高の9点と最低の3点を1つずつ外し、残り5人の平均8点を返します。

9点をつけた審査員は2人いますが、外れるのは1つだけです。同じ点数が並んでいても、外れる個数は割合で決まった数のまま変わりません。

候補者が複数いる場合は、候補者ごとに同じ形の式を入れてコピーしましょう。欠席で空欄の審査員がいても、空白は無視され、COUNTも空欄を除いた人数を数えます。人数に合わせて割合が自動で変わるのが、2.5/COUNTの強み。

売上や所要時間の平均から極端な月・日を除く

次は、ある店舗の12か月分の客単価(円)です。大型案件があった月や、セールで単価が落ちた月が混ざっています。

月1月2月3月4月5月6月
客単価3,2003,1008003,3003,1503,050
月7月8月9月10月11月12月
客単価8,5003,2003,1003,2503,4006,800

B2:B13に1月から12月の値が縦に入っているとして計算すると、次のとおりです。

=AVERAGE(B2:B13)          → 3737.5
=TRIMMEAN(B2:B13, 0.2)    → 3555
=TRIMMEAN(B2:B13, 0.35)   → 3212.5

割合0.2では、12×0.2=2.4が2に切り下げられ、最小の800と最大の8,500が外れます。ところが、もう1つの高い月である6,800は残ったまま。高い側に外れ値が2つあるのに、1つしか外れていない状態です。

6,800も外したいなら、割合を0.35にして4個(上下2個ずつ)外します。12×0.35=4.2なので、4に切り下げられる計算です。ただしこのとき、下側では普通の月の3,050も一緒に外れます。

TRIMMEANは、必ず上下同じ個数を外す関数です。外れ値が片側に偏っているデータでは、ふだんの値まで外れてしまうことを覚えておきましょう。

毎月行が増えていく表なら、範囲を B2:B のように下端を決めない形にしておくと便利です。スプレッドシートで試すと、開いた範囲でも空白行を無視して計算できました。ただし同じ列の下に合計行を置くと、その値も計算に含まれてしまいます。

FILTERと組み合わせて条件付きトリム平均を出す

AVERAGEIFのような「TRIMMEANIF」はありません。条件で絞り込んでからトリム平均を出したいときは、FILTERの結果をそのままTRIMMEANに渡します。

最初の対応時間の表で、東京の分だけを計算してみましょう。

=TRIMMEAN(FILTER(A2:A11, B2:B11="東京"), 0.4)   → 67.333…

東京の5件は50・62・68・72・80です。5×0.4=2なので最小の50と最大の80が外れ、残り3件の平均が返ります。

大阪の5件(60・65・70・75・200)でも、同じ規則で計算してみます。AVERAGEIFだと94分ですが、TRIMMEANで割合0.4なら60と200が外れて70分。外れ値がある拠点ほど差が大きく出ることがわかります。

=AVERAGEIF(B2:B11, "大阪", A2:A11)               → 94
=TRIMMEAN(FILTER(A2:A11, B2:B11="大阪"), 0.4)   → 70

注意したいのは、除外個数が「絞り込んだ後の件数」で決まる点です。5件に絞った状態で割合0.2を指定すると、5×0.2=1で何も外れません。条件ごとに件数が違う場合は、早見表で確認しておきましょう。

該当するデータがないと、FILTERの#N/Aがそのまま返ります。一覧表で「該当なし」と表示したいときは、IFERRORで包んでおきましょう。

=IFERROR(TRIMMEAN(FILTER(A2:A11, B2:B11="名古屋"), 0.4), "該当なし")

絞り込みの書き方は、スプレッドシートのFILTER関数の使い方で解説しています。外れ値を除かない通常の条件付き平均なら、スプレッドシートのAVERAGEIF関数の使い方が参考になります。

AVERAGE・MEDIANとの使い分けとエラー対処

AVERAGE・TRIMMEAN・MEDIANの選び方

先ほどの客単価のデータで、3つの関数を並べてみました。

関数計算のしかた客単価の結果向いている場面
AVERAGE全件の合計÷件数3,737.5円外れ値がない・合計に意味があるデータ
TRIMMEAN(0.2)上下を同じ数だけ外して平均3,555円上下に少しだけ極端な値があるデータ
MEDIAN並べたときの真ん中の値3,200円外れ値が多い・片側に偏るデータ

迷ったときは、まずAVERAGEとMEDIANを並べてみてください。2つの値が近ければ、外れ値の影響は小さいと判断できます。大きく離れていれば、TRIMMEANかMEDIANの出番です。

TRIMMEANは「平均の考え方を残しつつ、端の影響だけ弱めたい」ときに向いています。一方、件数が少なくて外せる個数が限られる場合や、外れ値が片側に偏る場合はMEDIANのほうが扱いやすいでしょう。MEDIANの使い方はスプレッドシートのMEDIAN関数の使い方をどうぞ。

割合を決める前に、データのばらつきや境目を確かめておくのもおすすめです。ばらつきの大きさは、スプレッドシートのSTDEV関数の使い方の方法で測れます。上位何%がどの値かを見るなら、スプレッドシートのPERCENTILE関数の使い方を参考にしてください。

#NUM!になる割合と、空白・文字列・列全体参照の扱い

スプレッドシートで試した結果を、エラーと範囲の扱いに分けてまとめました。

状況結果対処
割合が1以上(例: 1)#NUM!1未満の値にする
割合が負(例: -0.1)#NUM!0以上の値にする
範囲に数値が1つもない#NUM!範囲の指定ミスがないか確認する
FILTERで該当なし#N/AIFERRORで包む
空白・文字列・TRUE/FALSEが混ざる無視して計算COUNTで件数を確認する
開いた範囲(A2:A)計算できる同じ列の下に合計行を置かない

文字列や空白が混ざった範囲で、実際の動きを見てみましょう。別の表のB2:B9に、「10、空白、abc、TRUE、20、30、40、1000」の8セルを用意した例です。

=COUNT(B2:B9)            → 5
=TRIMMEAN(B2:B9, 0.4)    → 30
=TRIMMEAN(B2:B9, 0.2)    → 220

数値は5件として扱われ、空白・abc・TRUEはエラーにならず無視されました。割合0.4なら10と1000が外れ、残り3件の平均は30です。

一方、割合0.2では5×0.2=1で何も外れず、1000に引っ張られた220のままになります。計算対象から外れたセルがあると件数が減り、除外個数も変わる点に気をつけてください。COUNTの件数が想定より少ないときは、数字が文字列として入っていないか確認しましょう。

よくある質問

割合を0.1にしたのにAVERAGEと同じになるのはなぜ?

件数×割合が2未満だと、偶数に切り下げられて0個になるためです。10件のデータに0.1を指定すると10×0.1=1となり、何も外れません。

割合0.1で上下1個ずつ外すには20件以上が必要です。件数が少ないときは0.2以上にするか、2.5/COUNT(範囲) で上下1個ずつ外す形にしましょう。

割合は10%のようにパーセントで入力できる?

入力できます。スプレッドシートで =TRIMMEAN(A2:A11, 10%) と書くと、0.1を指定したときと同じ80.2が返りました。

10%も0.1も、上下の合計の割合という意味は同じです。「上下それぞれ10%」と読み違えないようにしてください。

ExcelのTRIMMEANと結果は同じ?

構文は同じ TRIMMEAN(データ, 割合) です。除外個数の決まり方も、Excelの公式説明にある「2の倍数に切り下げる」規則と同じ動きでした。

ただし、すべてのデータで結果が一致すると言い切れるだけの確認はしていません。大事な集計を移すときは、両方で同じ値になるか一度見比べると安心です。Excelを使う人は、TRIMMEAN関数の使い方(Excel版)も参考にしてください。

まとめ

スプレッドシートのTRIMMEAN関数は、上下の端を同じ個数ずつ外して平均を出す関数です。ポイントをおさらいしましょう。

  • 割合は上下の合計(0.2なら上下10%ずつ)。0以上1未満で、1以上や負の値は#NUM!
  • 外れる個数は「件数×割合」を偶数に切り下げ、上下に半分ずつ割り振る
  • 10件×0.1のように切り下げで0個になると、AVERAGEと同じ結果になる
  • 何個外れたかは =INT(COUNT(範囲)割合/2)2 で検算できる
  • 上下1個ずつ外すなら 2.5/COUNT(範囲)。2/件数は誤差で外れないことがある
  • 条件付きで求めるなら TRIMMEAN(FILTER(…), 割合)

まずは手元の表で、AVERAGEとTRIMMEANを並べてみてください。検算式で除外個数も一緒に確かめておけば、「なぜこの数字なのか」を自信を持って説明できるはずです。

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