「Excelで平均を出したいだけなのに、なぜか結果がおかしい」……そんな経験はありませんか。
0が混じって平均が低く出たり、フィルターをかけたのに全件で計算されたり。AVERAGE関数は基本的な関数ですが、意外な落とし穴が多いんです。
この記事では、ExcelのAVERAGE関数の使い方を基本から解説します。「0除外」「フィルター平均」「加重平均」まで、トラブル別にまるごと紹介しますよ。
AVERAGE関数とは?書き方と基本の使い方
AVERAGE関数(読み方: アベレージ)は、指定した数値の算術平均を返す関数です。英語の「Average(平均)」がそのまま関数名になっています。
Excelの集計でもっとも使用頻度が高い関数の一つです。売上の月平均やテストの平均点など、あらゆる場面で活躍します。
対応バージョン
AVERAGE関数はExcel 2007以降すべてのバージョンで使えます。Microsoft 365やGoogleスプレッドシートにも対応しています。
基本構文と引数の意味
=AVERAGE(数値1, [数値2], ...)
カッコの中に平均したい数値やセル範囲を指定します。引数はカンマ区切りで最大255個まで追加できます。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値1 | 必須 | 平均したい数値・セル参照・セル範囲 |
| 数値2, … | 任意 | 追加の数値やセル範囲(最大255個) |
引数に指定できるパターンは3つあります。
- 数値を直接入力:
=AVERAGE(80, 70, 90)→ 80 - セル参照:
=AVERAGE(A1, B1, C1) - セル範囲:
=AVERAGE(B2:B6)
一番よく使うのはセル範囲の指定です。「この列の平均を出して」とお願いする感覚ですね。
複数範囲・離れたセルを平均する
1月と3月の売上だけ平均したい、といった場面もありますよね。離れた範囲はカンマで区切って指定できます。
=AVERAGE(B2:B31, D2:D31)
この式はB2:B31とD2:D31のすべての数値をまとめて平均します。間の列は無視されるので、必要な月だけを選べます。
個別のセルを混ぜることもできます。
=AVERAGE(B2:B10, E5, G3)
範囲と個別セルを自由に組み合わせられるのが便利なポイントです。
空白・文字列・論理値はどう扱われる?
AVERAGE関数はデータの種類によって動きが変わります。ここを知っておくと、計算結果のズレを防げますよ。
セル範囲で指定した場合
| データの種類 | 扱い |
|---|---|
| 数値 | 計算に含まれる |
| 空白セル | 無視される(分母にも入らない) |
| 文字列 | 無視される |
| 論理値(TRUE/FALSE) | 無視される |
| 0 | 計算に含まれる(分母にカウント) |
| エラー値 | 結果がエラーになる |
引数に直接入力した場合
| データの種類 | 扱い |
|---|---|
| TRUE | 1として計算される |
| FALSE | 0として計算される |
| 文字列 | #VALUE! エラー |
セル範囲指定と直接入力で、論理値の扱いが変わる点に注意してください。範囲指定では無視されますが、直接入力ではTRUE=1、FALSE=0として計算されます。
空白と0の違いがカギ
空白セルは「データなし」として分母に入りません。0は「0という値がある」として分母に入ります。この違いが平均に大きく影響します。
【落とし穴1】0が混じると平均が下がる問題の解決策
AVERAGE関数でよくあるトラブルの筆頭がこれです。「まだデータがない行に0が入っていて、平均が実態より低くなる」パターンですね。
たとえば、7人分のテスト点数が以下のように並んでいるとします。
| セル | 値 |
|---|---|
| B2 | 80 |
| B3 | 0 |
| B4 | 70 |
| B5 | 90 |
| B6 | 0 |
| B7 | 60 |
| B8 | 50 |
=AVERAGE(B2:B8) の結果は 50 です(合計350 / 7個)。0が2つ含まれるため、実際に点数がある5人の平均70より大幅に低くなります。
AVERAGEIFで0を除外して平均する
0を除外するには、AVERAGEIF関数を使います。
=AVERAGEIF(B2:B8, "<>0")
「B2:B8のうち0以外のセルだけで平均する」という意味です。結果は 70 になります(合計350 / 5個)。
条件の "<>0" は「0と等しくない」を表す比較演算子です。これだけで0を除外できるので、覚えておくと便利ですよ。
複数条件で除外したい場合はAVERAGEIFSを使う
「0を除外して、かつ特定の部署だけ」のように条件が2つ以上あるときは、AVERAGEIFS関数の出番です。
=AVERAGEIFS(C2:C20, C2:C20, "<>0", A2:A20, "営業部")
この式は「C列が0でない、かつA列が営業部」の行だけで平均を計算します。条件をカンマで追加していくだけなので、書き方もシンプルです。
【落とし穴2】フィルター後の平均がおかしいときの対処法
フィルターで絞り込んだのに、AVERAGE関数の結果が変わらない。これも実務でよくあるトラブルです。
なぜAVERAGEはフィルターを無視するのか
AVERAGE関数は非表示行を含めてすべてのセルを計算対象にします。フィルターで行を隠しても、裏側では全データが計算されています。
これはAVERAGE関数の仕様です。フィルター対応の平均には、別の関数を使う必要があります。
SUBTOTAL(1,範囲)で可視セルだけ平均する
フィルターに対応した平均を出すなら、SUBTOTAL関数を使いましょう。
=SUBTOTAL(1, B2:B100)
第1引数の 1 が「平均」を意味します。フィルターで非表示にした行は自動的に除外されます。
SUBTOTAL関数の第1引数には2種類の番号があります。
| 番号 | 動作 | 手動で非表示にした行 |
|---|---|---|
| 1 | 平均 | 含む |
| 101 | 平均 | 除外する |
フィルターで隠した行はどちらも除外されます。違いは「手動で非表示にした行」の扱いです。手動非表示も除外したいなら101を使ってください。
AGGREGATEでエラー無視+手動非表示行も対応
SUBTOTAL関数には弱点が一つあります。範囲内にエラー値があると結果がエラーになる点です。
エラー値も無視したいなら、AGGREGATE関数を使います。
=AGGREGATE(1, 7, B2:B100)
引数の意味はこうなります。
- 1: 平均(AVERAGE相当)
- 7: 非表示行とエラー値の両方を無視
- B2:B100: 対象範囲
optionsの主な設定値をまとめます。
| options | 動作 |
|---|---|
| 5 | 非表示行を無視 |
| 6 | エラー値を無視 |
| 7 | 非表示行+エラー値を無視 |
フィルター平均で最も安全なのはAGGREGATE関数です。ただしExcel 2010以降でないと使えません。お使いのバージョンを確認してくださいね。
【応用】加重平均をSUMPRODUCTで実現する
加重平均とは?単純平均との違い
単純平均は、すべてのデータを同じ重みで扱います。一方、加重平均はデータごとに重み(ウェイト)を付けて計算する平均です。
身近な例だと、大学の成績(GPA)があります。単位数が多い科目ほど成績への影響が大きいですよね。これが加重平均の考え方です。
計算式はこうなります。
加重平均 = (値1×重み1 + 値2×重み2 + ...) / (重み1 + 重み2 + ...)
AVERAGE関数では加重平均を直接計算できません。そこでSUM関数とSUMPRODUCT関数を組み合わせます。
SUMPRODUCT÷SUMで加重平均を計算する式
以下のような評価データがあるとします。
| B列(スコア) | C列(重み) | |
|---|---|---|
| 2行目 | 80 | 3 |
| 3行目 | 70 | 2 |
| 4行目 | 90 | 5 |
加重平均の式はこうです。
=SUMPRODUCT(B2:B4, C2:C4) / SUM(C2:C4)
計算を確認してみましょう。
- 分子: 80×3 + 70×2 + 90×5 = 240 + 140 + 450 = 830
- 分母: 3 + 2 + 5 = 10
- 結果: 830 / 10 = 83
単純平均なら (80+70+90)/3 = 80 です。重みが5と大きい90点の影響で、加重平均は83になります。
この違いが重要になる場面は多いです。売上の地域別加重平均や、配点が異なるテストの総合評価などで活用してみてください。
文字列として格納された数値への対処
「数値として保存されていない数値」が原因で平均がズレる
Excelで意外と多いのが、見た目は数字なのに中身が文字列というケースです。CSVの取り込みや手入力のミスでよく発生します。
AVERAGE関数は文字列を無視します。エラーは出ないのに、特定のセルが計算から外れるのが厄介なポイントです。
文字列格納数値の見分け方は3つあります。
- セル左上に緑色の小さな三角マークが表示される
- セルの数値が左寄せになっている(数値は通常右寄せ)
=ISNUMBER(A1)で FALSE が返される
これらに該当したら、そのセルは文字列扱いになっています。
VALUE関数または一括変換で正しい数値に直す
文字列を数値に変換する方法は複数あります。
方法1: エラーボタンから変換
緑三角が表示されたセルを選択します。黄色い警告アイコンをクリックし、「数値に変換」を選びましょう。複数セルを選択してから操作すれば一括変換もできます。
方法2: VALUE関数で変換
=VALUE(A1)
文字列の “123” を数値の 123 に変換します。別セルに変換結果を出す方法です。
方法3: 算術演算で変換
=A1*1
文字列に1を掛けると、Excelが自動的に数値に変換します。VALUE関数と同じ効果で、式が短くて済みます。
大量のデータを扱うときは、方法1のエラーボタン一括変換が最も手軽です。数式で残したいならVALUE関数を使ってくださいね。
AVERAGEIF・AVERAGEIFS・AVERAGEA・DAVERAGEとの使い分け
目的別・関数選択チャート
AVERAGE系の関数は種類が多くて迷いますよね。以下のチャートで目的に合った関数を選んでください。
| やりたいこと | 使う関数 | 式の例 |
|---|---|---|
| 範囲全体の平均 | AVERAGE | =AVERAGE(B2:B100) |
| 条件1つで平均 | AVERAGEIF | =AVERAGEIF(A:A,"東京",B:B) |
| 条件2つ以上で平均 | AVERAGEIFS | =AVERAGEIFS(C:C,A:A,"東京",B:B,">=100") |
| TRUE/FALSEも含めて平均 | AVERAGEA | =AVERAGEA(B2:B100) |
| データベース形式で条件平均 | DAVERAGE | =DAVERAGE(A1:C100,"売上",E1:E2) |
| フィルター対応の平均 | SUBTOTAL | =SUBTOTAL(1,B2:B100) |
| 外れ値に強い代表値 | MEDIAN | =MEDIAN(B2:B100) |
迷ったときの判断基準はシンプルです。
- 条件なし → AVERAGE
- 条件あり → AVERAGEIF / AVERAGEIFS
- フィルター使用 → SUBTOTAL / AGGREGATE
- 論理値も計算に入れたい → AVERAGEA
DAVERAGEはデータベース関数の一種です。条件を別のセル範囲で指定する方式で、複雑な条件設定に向いています。ただし、多くの場面ではAVERAGEIFSで代用できます。
関数の詳しい使い方は個別の解説記事を参考にしてください。Excel関数一覧やExcel関数を機能別に検索からも探せますよ。
エラー(#DIV/0!)の原因と回避方法
AVERAGE関数で最もよく見るエラーが #DIV/0! です。これは「0で割ろうとした」という意味のエラーです。
原因はシンプルで、対象範囲に数値が1つもないときに発生します。すべてのセルが空白、または文字列だけの場合がこれに該当します。
まだデータが入っていないテンプレートにAVERAGE関数を仕込んでおくと、このエラーが表示されがちです。
IFERRORで空白返しにする
IFERROR関数で囲むだけで解決できます。
=IFERROR(AVERAGE(B2:B20), "")
エラーのときは空白(””)を返し、データが入ったら自動で平均値に切り替わります。
表示する内容はお好みで変えられます。
=IFERROR(AVERAGE(B2:B20), "-")
=IFERROR(AVERAGE(B2:B20), "データなし")
=IFERROR(AVERAGE(B2:B20), 0)
テンプレートを作るときは、あらかじめIFERRORで囲んでおくのがおすすめです。見た目がすっきりしますよ。
小数桁が長くなる場合は、ROUND関数と組み合わせましょう。
=IFERROR(ROUND(AVERAGE(B2:B20), 1), "")
平均値を小数第1位で丸めつつ、エラー時は空白にする式です。報告書や集計表で重宝します。
まとめ:AVERAGE関数トラブル別 解決早見表
この記事では、ExcelのAVERAGE関数の基本から落とし穴の対処法まで解説しました。最後に、トラブル別の解決策を一覧にまとめます。
| トラブル | 原因 | 解決策 |
|---|---|---|
| 平均が想定より低い | 0が計算に含まれている | =AVERAGEIF(範囲,"<>0") |
| フィルター後も平均が変わらない | AVERAGEは非表示行も計算する | =SUBTOTAL(1,範囲) |
| エラー値がある範囲で計算できない | AVERAGE・SUBTOTALはエラーを処理できない | =AGGREGATE(1,7,範囲) |
| #DIV/0! エラーが出る | 対象範囲に数値がない | =IFERROR(AVERAGE(範囲),"") |
| 特定セルが計算に含まれない | 文字列として格納された数値 | VALUE関数または*1で数値に変換 |
| 重み付きの平均を出したい | AVERAGE関数では対応できない | =SUMPRODUCT(値,重み)/SUM(重み) |
ポイントをおさらいしましょう。
- AVERAGE関数は空白・文字列をスキップするが、0はスキップしない
- フィルター対応の平均にはSUBTOTAL関数かAGGREGATE関数を使う
- 加重平均はSUMPRODUCT / SUMの組み合わせで計算する
- 文字列格納数値はエラーが出ずに無視されるため、発見が遅れやすい
- テンプレートにはIFERRORを仕込んでおくと安心
AVERAGE関数自体はとてもシンプルです。落とし穴のパターンさえ押さえれば、平均計算で困ることはなくなります。ぜひ今日の業務から試してみてくださいね。
