要点 —
AVERAGEIFSは列を平均しますが、対象はすべての条件を満たした行だけ:=AVERAGEIFS(平均範囲, 条件範囲1, 条件1, …)。条件の文法はSUMIFSやCOUNTIFSとまったく同じですが、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!、そして包むだけの一手 - 静かな罠:ゼロは平均され、空白は飛ばされる
AVERAGEIFとAVERAGEIFSで逆になる引数の順番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 と同じ話)
AVERAGEIF と AVERAGEIFS は、SUMIF と SUMIFS とまったく同じように引数をひっくり
返します。
=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関数
