「スプレッドシートで平均を出したのに、なんだか実感とずれている」。そんな経験はありませんか?
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列:拠点 |
|---|---|---|
| 2 | 50 | 東京 |
| 3 | 60 | 大阪 |
| 4 | 62 | 東京 |
| 5 | 65 | 大阪 |
| 6 | 68 | 東京 |
| 7 | 70 | 大阪 |
| 8 | 72 | 東京 |
| 9 | 75 | 大阪 |
| 10 | 80 | 東京 |
| 11 | 200 | 大阪 |
=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ステップで決まります。
- データの件数×割合を計算する
- その値を偶数に切り下げる(2.4なら2、3なら2、1なら0)
- 切り下げた個数を、上と下に半分ずつ割り振る
上下で同じ個数を外すため、合計は必ず偶数です。先ほどの10件のデータで割合だけを変えると、結果は次のようになりました。
| 式 | 件数×割合 | 外れた個数(合計) | 結果 |
|---|---|---|---|
| =TRIMMEAN(A2:A11, 0.1) | 1 | 0個 | 80.2 |
| =TRIMMEAN(A2:A11, 0.15) | 1.5 | 0個 | 80.2 |
| =TRIMMEAN(A2:A11, 0.2) | 2 | 2個(上下1個ずつ) | 69 |
| =TRIMMEAN(A2:A11, 0.25) | 2.5 | 2個(上下1個ずつ) | 69 |
| =TRIMMEAN(A2:A11, 0.3) | 3 | 2個(上下1個ずつ) | 69 |
割合0.1では、10×0.1=1が0に切り下げられます。そのため結果はAVERAGEと同じ80.2のまま。0.3でも3が2に切り下げられ、0.2のときと結果は変わりません。
この動きは、Excelの公式説明にある「2の倍数に切り下げる」規則と同じです。Googleのヘルプには切り下げ規則の記載が見当たりません。ここでは、スプレッドシートで動かして確かめた規則として紹介しています。
データ件数×割合の早見表
件数と割合の組み合わせごとに、外れる個数の合計を上の規則で計算しました。( )内は上下それぞれの個数です。
| 件数\割合 | 0.1 | 0.2 | 0.25 | 0.3 |
|---|---|---|---|---|
| 5件 | 0 | 0 | 0 | 0 |
| 8件 | 0 | 0 | 2(1) | 2(1) |
| 10件 | 0 | 2(1) | 2(1) | 2(1) |
| 12件 | 0 | 2(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 | 審査員1 | 7 |
| 3 | 審査員2 | 8 |
| 4 | 審査員3 | 8 |
| 5 | 審査員4 | 9 |
| 6 | 審査員5 | 9 |
| 7 | 審査員6 | 8 |
| 8 | 審査員7 | 3 |
=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,200 | 3,100 | 800 | 3,300 | 3,150 | 3,050 |
| 月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
|---|---|---|---|---|---|---|
| 客単価 | 8,500 | 3,200 | 3,100 | 3,250 | 3,400 | 6,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/A | IFERRORで包む |
| 空白・文字列・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を並べてみてください。検算式で除外個数も一緒に確かめておけば、「なぜこの数字なのか」を自信を持って説明できるはずです。
