スプレッドシートのAVERAGEIF関数の使い方|条件付き平均
「売上データから特定の支店だけの平均を出したい」「アンケートで未回答を除いた平均点を計算したい」。こういう場面、仕事でよくありますよね。
AVERAGE関数なら全体の平均を出せます。でも、条件で絞り込んだ平均となると手作業になりがちです。フィルターで絞り込んでから計算し直す、という手間は避けたいところです。
そんなときに使うのがAVERAGEIF関数です。この記事では基本の書き方から条件指定のパターン、よくあるエラーの対処法まで紹介します。
AVERAGEIF関数とは?
AVERAGEIF関数(読み方: アベレージイフ関数)は、指定した条件に一致するセルの値だけを平均する関数です。「AVERAGE(平均)」+「IF(もし)」が名前の由来です。「もし条件に合えば平均する」という意味になっています。
たとえば売上表で「東京支店の売上平均だけを知りたい」場合を考えてみましょう。A列に支店名、B列に売上金額が並んでいるとします。AVERAGEIF関数を使えば、A列から「東京」を探して該当行のB列を自動で平均してくれます。
NOTE
AVERAGEIF関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も高いので、ファイルのやり取りでも安心です。
条件なしのAVERAGE関数との違い
AVERAGE関数は範囲内のすべての数値を平均します。一方、AVERAGEIF関数は条件に一致した数値だけを平均します。
- AVERAGE関数: 全データの平均(条件なし)
- AVERAGEIF関数: 条件に合うデータだけの平均
全体平均と部門別平均の両方を出すなら、両方を組み合わせるのが一般的です。
SUMIF・COUNTIFとの構文対応関係
AVERAGEIF関数は、SUMIF関数やCOUNTIF関数と同じ「IF系関数ファミリー」です。構文のルールもほぼ共通しています。
| 関数名 | 機能 | 構文 |
|---|---|---|
| SUMIF | 条件一致の合計 | =SUMIF(範囲, 条件, [合計範囲]) |
| COUNTIF | 条件一致の件数 | =COUNTIF(範囲, 条件) |
| AVERAGEIF | 条件一致の平均 | =AVERAGEIF(範囲, 条件, [平均範囲]) |
引数の順番も同じです。SUMIF関数に慣れている方なら、合計が平均に変わるだけ、と覚えるとスムーズですよ。
AVERAGEIF関数の書き方(構文と引数)
基本構文
=AVERAGEIF(条件範囲, 条件, [平均範囲])
カッコの中に、検索する範囲・条件・平均する範囲を指定します。
引数の詳細と省略ルール
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 条件範囲 | 必須 | 条件を検索するセル範囲(例: A2:A20) |
| 条件 | 必須 | 平均対象を絞り込む条件(文字列・数値・セル参照など) |
| 平均範囲 | 任意 | 実際に平均するセル範囲(省略時は「条件範囲」を平均) |
第3引数の「平均範囲」は省略できます。省略すると「条件範囲」そのものが平均の対象になります。ただし実務では「条件範囲」と「平均範囲」を分けて使うケースがほとんどです。
TIP
条件に文字列や比較演算子を指定するときは、必ずダブルクォーテーション
""で囲んでください。数値のみの場合は不要です。
基本的な使い方
売上データを例にAVERAGEIF関数を使ってみましょう。A列に支店名、B列に売上金額が入っています。
| A列(支店名) | B列(売上金額) | |
|---|---|---|
| 2行目 | 東京 | 300 |
| 3行目 | 大阪 | 200 |
| 4行目 | 東京 | 500 |
| 5行目 | 福岡 | 150 |
| 6行目 | 大阪 | 350 |
| 7行目 | 東京 | 400 |
文字列条件で絞り込む(例:支店名・担当者名)
「東京」支店の売上平均を求めるには、次のように入力します。
=AVERAGEIF(A2:A7,"東京",B2:B7)
- A2:A7(条件範囲): ここから「東京」を探す
- “東京”(条件): この文字列と一致するものが対象
- B2:B7(平均範囲): 一致した行のB列を平均する
A2・A4・A7が「東京」なので、(300 + 500 + 400) / 3 = 400 が結果です。
平均対象範囲を別列に指定する
条件をセル参照にすると便利です。D2セルに支店名を入力し、数式で参照します。
=AVERAGEIF(A2:A7,D2,B2:B7)
D2を「大阪」に変えれば275、「福岡」に変えれば150と自動で切り替わります。集計用ダッシュボードを作るときに重宝しますよ。
条件指定パターン一覧
AVERAGEIF関数ではさまざまな条件を使えます。実務でよく使うパターンをまとめました。
比較演算子を使う(以上・未満・以外)
数値の大小で絞り込むには比較演算子を使います。演算子はダブルクォーテーションで囲んでください。
| 書き方 | 意味 | 使用例 |
|---|---|---|
">=300" | 300以上 | =AVERAGEIF(B2:B7,">=300") |
">200" | 200より大きい | =AVERAGEIF(B2:B7,">200") |
"<=200" | 200以下 | =AVERAGEIF(B2:B7,"<=200") |
"<>300" | 300以外 | =AVERAGEIF(B2:B7,"<>300") |
セル参照と演算子を組み合わせることもできます。E2セルに基準値が入っている場合は次のように書きます。
=AVERAGEIF(B2:B7,">="&E2)
演算子を "" で囲み、& でセル参照を連結するのがポイントです。
ワイルドカードで部分一致(*・?)
部分一致で検索したい場合はワイルドカードが使えます。
| 記号 | 意味 | 使用例 | マッチする値 |
|---|---|---|---|
* | 任意の文字列(0文字以上) | "営業*" | 営業部、営業1課 |
? | 任意の1文字 | "?月" | 1月、2月 |
~* | *そのものを検索 | "~*印" | *印 |
たとえば「営業」で始まる部署の売上平均を出すには次のように書きます。
=AVERAGEIF(A2:A100,"営業*",B2:B100)
部門名にサブカテゴリがある場合に便利です。
0を除外して正確な平均を出す
実務でありがちなのが「未入力セルに0を入れてしまう」運用です。この場合、0が平均計算に含まれてしまい、実際よりも平均が下がります。
0を除外するには "<>0" を条件にします。
=AVERAGEIF(B2:B20,"<>0")
たとえばテストの点数データで未受験者を0にしている場合、この書き方で受験者だけの平均が出せます。条件範囲と平均範囲が同じなので、第3引数は省略できますよ。
空白セルを除外する
AVERAGEIF関数は空白セルを自動で計算から除外します。ただし、「条件範囲に空白がある行を除外したい」場合は "<>" を使います。
=AVERAGEIF(A2:A20,"<>",B2:B20)
"<>" は「空白でない」という意味です。担当者名が未入力の行を除外したいケースで活用できます。
実務での活用例
基本がわかったところで、仕事でよく使うパターンを紹介します。
部門別・担当者別の売上平均
A列に担当者名、B列に売上金額が入ったデータから、担当者ごとの売上平均を出します。
=AVERAGEIF($A$2:$A$100,D2,$B$2:$B$100)
範囲と平均範囲を絶対参照($付き)にしておけば、数式を下にコピーするだけで全員分の集計が完成します。D列に担当者名を並べたサマリー表を作るときに便利ですよ。
アンケート評点の集計(無回答を除く)
アンケートで「5段階評価」を集計する場合、無回答を0にしているとAVERAGE関数では正確な平均が出ません。
=AVERAGEIF(C2:C100,"<>0")
0を除外すれば、実際に回答した人だけの平均評点を算出できます。さらに設問ごとの条件も加えたい場合は、後述のAVERAGEIFS関数を検討してみてください。
よくあるエラーと対処法
AVERAGEIF関数で思った結果にならないケースをまとめました。
#DIV/0! が出るとき
AVERAGEIF関数で最もよく見るエラーが #DIV/0! です。条件に一致するセルが1つもないときに発生します。平均を計算するための分母が0になるのが原因です。
対処法は2つあります。
方法1: IFERRORで代替値を表示する
=IFERROR(AVERAGEIF(A2:A10,"東京",B2:B10), 0)
エラー時に0を返します。「該当なし」のような文字列にすることもできます。
方法2: IF+COUNTIFで事前チェックする
=IF(COUNTIF(A2:A10,"東京")>0, AVERAGEIF(A2:A10,"東京",B2:B10), "該当なし")
COUNTIF関数で該当件数を先にチェックします。0件なら「該当なし」を表示し、1件以上ならAVERAGEIF関数を実行します。エラーの原因を明示したい場合はこちらが丁寧です。
結果が0になる・期待値と合わないとき
| 原因 | 症状 | 対処法 |
|---|---|---|
| 余分なスペース | 「東京 」と「東京」が不一致 | TRIM関数でスペースを除去 |
| 全角・半角の不一致 | 「ABC」と「ABC」が不一致 | ASC関数またはJIS関数で統一 |
| 文字列型の数値 | 数値に見えるが左揃え | VALUE関数で数値に変換 |
| 範囲指定のずれ | 条件範囲と平均範囲の行がずれている | 範囲の先頭行を揃える |
| 引用符忘れ | =AVERAGEIF(A:A,東京,B:B) | 文字列は "東京" と囲む |
TIP
期待した値にならない場合は、まずCOUNTIF関数で条件一致の件数を確認してみてください。
=COUNTIF(A2:A10,"東京")が0なら、データ側に問題があります。
似た関数との使い分け
条件が複数なら→AVERAGEIFSにアップグレード
条件を2つ以上指定したい場合はAVERAGEIFS関数を使います。ここで注意したいのが引数の順番が逆転することです。
| 比較項目 | AVERAGEIF | AVERAGEIFS |
|---|---|---|
| 条件の数 | 1つだけ | 複数(最大127個) |
| 引数の順番 | 条件範囲 → 条件 → 平均範囲 | 平均範囲 → 条件範囲1 → 条件1 → ... |
| ワイルドカード | 使える | 使える |
=AVERAGEIF(A2:A10, "東京", C2:C10)
=AVERAGEIFS(C2:C10, A2:A10, "東京", B2:B10, "営業部")
AVERAGEIF関数は「条件範囲 → 条件 → 平均範囲」の順です。一方、AVERAGEIFS関数は「平均範囲」が先頭に来ます。この引数順序の逆転がAVERAGEIFS関数を使い始めるときの最大の落とし穴です。
ちょっとややこしく見えますが、やっていることはシンプルです。「平均範囲が先に来る」とだけ覚えておけば大丈夫ですよ。
SUMIF関数とSUMIFS関数の関係もまったく同じパターンです。
ExcelのAVERAGEIFとの違い(互換性)
AVERAGEIF関数の基本的な動作はExcelと同じです。ほぼ同じ感覚で使えます。
| 項目 | Googleスプレッドシート | Excel |
|---|---|---|
| 基本動作 | 同じ | 同じ |
| ワイルドカード | * ? 使用可 | * ? 使用可 |
| 比較演算子 | 同じ書き方 | 同じ書き方 |
| 空白セルの扱い | 計算から除外 | 計算から除外 |
| TRUE/FALSEの扱い | 平均に含まない | 平均に含まない |
| 大文字小文字の区別 | 区別しない | 区別しない |
大きな違いはありません。ExcelのAVERAGEIF関数に慣れている方は、同じ書き方でそのまま使えますよ。
まとめ
AVERAGEIF関数のポイントをおさらいしましょう。
- AVERAGEIF関数は「条件を1つ指定して平均する」関数
- 書き方:
=AVERAGEIF(条件範囲, 条件, [平均範囲]) - 比較演算子(
>=/<>など)で数値条件を指定できる - ワイルドカード(
*/?)で部分一致の平均ができる "<>0"で0を除外すれば正確な平均が出せる#DIV/0!はIFERRORかIF+COUNTIFで回避- 条件が2つ以上ならAVERAGEIFS関数に切り替え(引数の順番に注意)
まずは基本の =AVERAGEIF(条件範囲, "条件", 平均範囲) から試してみてください。条件付きの平均が1つの数式で出せると、レポート作成がグッと楽になりますよ。
