🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのAVERAGEIF & AVERAGEIFS — 条件付き平均と #DIV/0! の「該当なし」罠

|

ExcelのAVERAGEIF & AVERAGEIFS — 条件付き平均と #DIV/0! の「該当なし」罠

要点AVERAGEIFS は列を平均しますが、対象はすべての条件を満たした行だけ: =AVERAGEIFS(平均範囲, 条件範囲1, 条件1, …)。条件の文法は SUMIFSCOUNTIFS とまったく同じですが、1つだけ意表を突く 挙動があります。1件も一致しないとき、SUMIFS は 0 を返すのに、AVERAGEIFS#DIV/0! を返します——0 個の数は平均できないからです。IFERROR でガードします。 もう2つ噛んできます。ゼロは平均し、空白は飛ばす(だから「欠損 = 0」が黙って平均を 引き下げます)。そして SUMIF / SUMIFS と同じく、単数形と複数形で引数の順番が です。対応は Excel 2007 以降です。

=AVERAGEIFS(Score, Class, "A")
=IFERROR(AVERAGEIFS(Score, Class, "A", Score, ">"&G1), "n/a")

AVERAGEIFS は条件付き集計の3つ目の顔です。SUMIFS は合計、COUNTIFS は計数、 AVERAGEIFS は平均。ほかの2つを読んでいれば条件の言語はもう知っているので、本記事は 構文の繰り返しではなく、平均を別物にして危うくする3点に時間を割きます。

この記事で学べること

  • 考え方の軸:同じ条件付き集計エンジンが、いま平均を返す
  • 看板の罠:空集合 → #DIV/0!、そして包むだけの一手
  • 静かな罠:ゼロは平均され、空白は飛ばされる
  • AVERAGEIFAVERAGEIFS で逆になる引数の順番
  • AVERAGEIFS加重平均をできない理由——そして代わりに使うもの

考え方の軸:同じエンジンが平均を返す

AVERAGEIFS は、すべての条件を満たした行を残し、その平均を返します——それらの行の SUMIFS を、それらの行の COUNTIFS で割ったものです。この定義は雑学ではありません。 以下のすべての罠の出どころそのものです。条件は仲間の関数とまったく同じに働きます。 演算子は引用符の中、セルと比べるなら ">"&G1、ロケール安全な日付境界には DATE()、 ペアをまたいだ AND は標準装備です。

' クラス A の平均点
=AVERAGEIFS(Score, Class, "A")

' クラス A で、G1 のしきい値より上の平均点(AND)
=AVERAGEIFS(Score, Class, "A", Score, ">"&G1)

看板の罠:一致なしは 0 ではなく #DIV/0!

これが誰もが引っかかる挙動で、「合計 ÷ 件数」からまっすぐ導かれます。1件も一致 しないと件数は 0、ゼロで割るのは未定義——だから AVERAGEIFS#DIV/0! を 返します。同じ空集合で仲間と比べてみましょう。

=SUMIFS(Score, Class, "Z")        ' -> 0        (何も無いものの合計はゼロ)
=COUNTIFS(Class, "Z")             ' -> 0        (何も無いものの件数はゼロ)
=AVERAGEIFS(Score, Class, "Z")    ' -> #DIV/0!  (何も無いものの平均は未定義)

この非対称がダッシュボードを壊します。SUMIFS の集計は空のカテゴリでも生き延びるのに、 隣の AVERAGEIFS は赤く光り、それを参照するものすべてに連鎖します。直し方は、「データ なし」を何と表示したいかを決めて包むことです。

=IFERROR(AVERAGEIFS(Score, Class, "A"), "n/a")
=IFERROR(AVERAGEIFS(Score, Class, "A"), "")     ' 空白にしたいとき

レポートに渡す、あるいはいつか空になりうるカテゴリに使う AVERAGEIFS には、IFERROR を 反射的に付けるクセを。これは守りすぎの心配性ではなく——「まだ売上なし」がn/aと読める か、壊れたシートになるかの分かれ目です。

静かな罠:ゼロは数え、空白は数えない

AVERAGEIFS は平均範囲の中の空白や文字列のセルを無視します——分子にも分母にも 入りません。ですが 0 が入ったセルは本物の数なので、平均に含まれ、平均を引き 下げます。これは数式の問題に化けたデータ入力の判断です。

営業担当が売上ゼロで、それを 0 と記録すれば、そのゼロは平均に入ります。空白で 記録すれば、その人はまるごと除外されます。同じ「売上なし」でも、平均は2つまったく違う 値になり——どちらを得たのかを数式は何も教えてくれません。

「欠損」が何を意味するかを、データの入口で決めてください。ゼロを平均から外すべきなら、 空白のままにするか、それを除く条件を足します: =AVERAGEIFS(Score, Class, "A", Score, "<>0")。肝心なのは、データ入力の慣習に黙って 決めさせるのではなく、選択を明示することです。

逆になる引数の順番(SUMIF と同じ話)

AVERAGEIFAVERAGEIFS は、SUMIFSUMIFS とまったく同じように引数をひっくり 返します。

=AVERAGEIF(Class, "A", Score)        ' 先に条件範囲、平均範囲は最後
=AVERAGEIFS(Score, Class, "A")        ' 平均範囲が先、そのあとに条件のペア

同じ罠、同じ対策:何でも AVERAGEIFS を使うこと。順番は条件が1つでも5つでも一貫 していて、2つの形の間でコピーしたときに起きる静かな列の入れ替えを避けられます。

判断:AVERAGEIFS は単純平均であって加重平均ではない

これは構文を習得した後でも生き残る概念的な誤りです。AVERAGEIFS は平均範囲の中の セルを平均します——一致した各行が等しい重みを持ちます。各行が数量に比例して重みを 持つべき加重平均は出せません。注文をまたいだ価格の平均は、顧客が実際に払った 平均ではありません。価格を数量で重みづけする必要があります。

' 間違った問い:価格セルの単純平均
=AVERAGEIFS(Price, Region, "West")

' 平均単価には正しい:合計金額 ÷ 合計数量(加重)
=SUMIFS(Value, Region, "West") / SUMIFS(Qty, Region, "West")

「一致したセルの平均」と「平均単価」は別の問いで、AVERAGEIFS は前者にしか答えません。 同じ限界は条件付きの中央値最頻値にも当てはまります——MEDIANIFS は存在しない ので、FILTER を持ち出して包みます: =MEDIAN(FILTER(Score, Class="A"))

ExcelMaster の使いどころ

条件付き平均の危ないところは、打つことではありません——空のカテゴリが #DIV/0! を投げる こと、記録されたゼロが平均を歪めること、そして「平均価格」がたいてい加重単価であるべき こと、を知っていることです。ExcelMaster はあなたの意図を読み取り——今四半期の West チームの平均成約規模、なければ空白——ガードした AVERAGEIFS(あるいは本当に そう意味していたなら加重の SUMIFS / SUMIFS)を書きます。だから数字は、あなたが尋ねた 問いに答えます。

よくある質問

AVERAGEIFS が #DIV/0! を返すのはなぜ?

条件に1行も一致せず、平均する対象がなく、Excel は件数ゼロで割れないからです。包みます: =IFERROR(AVERAGEIFS(…), "n/a")。空集合で 0 を返す SUMIFS と違い、AVERAGEIFS は 何も一致しないと必ずエラーになります。

AVERAGEIFS は平均にゼロを含める?

含めます。0 が入ったセルは本物の数なので平均に入り、平均を下げます。空白と文字列の セルはまるごと飛ばされます。「欠損」データを 0 で保存していて数えるべきでないなら、 条件で除きます:=AVERAGEIFS(Score, Score, "<>0")

AVERAGEIF と AVERAGEIFS の違いは?

AVERAGEIF は先に条件範囲で1つの条件、AVERAGEIFS平均範囲が先で1つ以上—— 引数が逆です。静かな入れ替えを避けるため、常に AVERAGEIFS を使います。

条件付きで加重平均を出すには?

AVERAGEIFS ではできません——どの行も等しく重みづけします。条件付き合計を条件付き合計で 割ります:=SUMIFS(Value, Region, "West") / SUMIFS(Qty, Region, "West")

2つの日付の間の値を平均するには?

日付列に2つの条件を、DATE() で組み立てます: =AVERAGEIFS(Amount, OrderDate, ">="&DATE(2026,1,1), OrderDate, "<="&DATE(2026,3,31)) ——そして窓が空のときに備えて IFERROR で包みます。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-24。

関連ガイド: ExcelのSUMIFS関数 · ExcelのCOUNTIFS関数 · ExcelのFILTER関数 · ExcelのUNIQUE関数