エクセル AVERAGEIFS 関数:複数の条件に一致する平均を求める

はじめに

エクセルの AVERAGEIFS 関数の使い方を紹介します。

AVERAGEIFS 関数は複数の条件に一致するセルの平均を求めます。「AVERAGEIF 関数」を複数条件に対応した上位互換の関数です。

=AVERAGEIFS(A1:A3,A1:A3,">=100",A1:A3,"<=999") のようにして、100 ~ 999 の範囲の平均を計算できます。

=AVERAGEIFS(A1:A3,A1:A3,"<>0") のようにして、0 以外の数値の平均を計算できます。

ワイルドカードを使用して部分一致にしたり、以上や以下などを複数条件にして平均を求めたいときに使用します。

文字列かどうかや空白など、特定の値を条件にする方法は「COUNTIF 関数」にまとめています。
  • 目次
    • AVERAGEIFS 関数の引数
    • 使い方、条件が一つ
    • 使い方、複数条件
    • 高度な使い方
    • 解説

AVERAGEIFS 関数の引数

AVERAGEIFS(平均範囲, 条件範囲1, 条件1)
AVERAGEIFS(平均範囲, 条件範囲1, 条件1, 条件範囲2, 条件2 …)
すべての条件範囲の中ですべての条件を満たすセルと対応する平均範囲の平均を求めます。

引数「平均範囲」セルの範囲を指定します。この範囲の平均を求めます。配列不可
引数「条件範囲」引数「条件」の対象になるセルの範囲を指定します。配列不可
引数「条件」平均する条件を比較演算子やワイルドカードを使って指定します。スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

配列不可:配列を指定できません。セルの範囲のみ指定できます。

引数「条件」

使用できる比較演算子には次のものがあります。

演算子 演算名 使用例 結果
=等しい"=2"2 と同じ
<>等しくない"<>2"2 以外
>大きい">2"2 より大きい
<小さい"<2"2 より小さい
>=以上">=2"2 以上
<=以下"<=2"2 以下

使用できるワイルドカードには次のものがあります。

パターン 説明 使用例 一致例
*任意の長さの文字"あ*"あ, あい, あいう
?任意の 1 文字"あ?"あい, あか, あき
~ワイルドカードの文字 * ? を検索する"あ~?~*"あ?*

使い方、条件が一つ

AVERAGEIFS 関数の条件が一つの使い方を紹介します。

値が 100 以上の平均を求める

値が 100 以上の平均を求めます。

=AVERAGEIFS(B3:B6,B3:B6,">=100")
12

名前がエクセルの平均を求める

名前が エクセル の値の平均を求めます。

=AVERAGEIFS(C3:C6,B3:B6,"=エクセル")
13

特定の文字が入っているセルの平均を求める

ワイルドカードを使用して、名前に ワード が入っている値の平均を求めます。

=AVERAGEIFS(C3:C6,B3:B6,"=*ワード*")
=AVERAGEIFS(C3:C6,B3:B6,"=ワード*")
=AVERAGEIFS(C3:C6,B3:B6,"=*ワード")

名前が ワード で始まる値は "=ワード*" のように入力します。

名前が ワード で終わる値は "=*ワード" のように入力します。

21

使い方、複数条件

AVERAGEIFS 関数の複数条件の使い方を紹介します。

数値が指定の範囲内の平均を求める

値が 100 以上でセル「C3」以下の平均を求めます。

=AVERAGEIFS(B3:B7,B3:B7,">=100",B3:B7,"<="&C3)

"比較演算子"&セル名 のようにしてセル参照を使用できます。

19

日付が指定の範囲内の平均を求める

日付がセル「D3」以上で 2000/12/31 までの値の平均を求めます。

=AVERAGEIFS(B3:B7,C3:C7,">="&D3,C3:C7,"<"&DATE(2001,1,1))

終了日を "<="&DATE(2000,12,31) にすると、時刻が含まれるときに終了日が条件に一致しなくなるので、次の日より小さい判定にしています。

20

名前がエクセルかつ値が 100 以上の平均を求める

名前が エクセル で値が 100 以上の平均を求めます。

=AVERAGEIFS(C3:C6,B3:B6,"=エクセル",C3:C6,">=100")
14

名前がエクセルかつバージョンが 365 の平均を求める

名前が エクセル でバージョンが 365 の値の平均を求めます。

=AVERAGEIFS(D3:D7,B3:B7,"=エクセル",C3:C7,365)
15

高度な使い方

AVERAGEIFS 関数と他の関数を組み合わせた使い方などを紹介します。

OR 条件

複数条件のどれか一つでも条件に一致しているセルの平均を求めるには、判定用の列を作成してその中に「OR 関数」で条件を入力します。その結果を引数「条件範囲」に指定して平均を求めます。

名前が エクセル またはバージョンが 365 の条件を入力します。

=OR(B2="エクセル",C2=365)

その結果が TRUE のものを引数「条件」に指定して平均を求めます。

=AVERAGEIFS(D3:D7,E3:E7,TRUE)
17

条件が 1 つになるので「AVERAGEIF 関数」でも同じようにできます。

判定用の列を作成しない (スピル)

判定用の列を作成しないで平均を求めるには「スピル」を使用します。

=AVERAGE(IF((B3:B7="エクセル")+(C3:C7=365),D3:D7,FALSE))

IF 関数」の中にセルの範囲を入力しているのでスピルします。

IF 関数」の条件に一致するときは、平均を求めるための値を返しています。それを「AVERAGE 関数」で平均を求めます。

条件に「OR 関数」を使用していないのはスピルされないためです。

スピルで AND や OR 条件にするには「スピル、動的配列数式の使い方」をご覧ください。
スピルは 365 または 2021 から使用できます。

数式を Ctrl + Shift + Enter で確定すると「配列数式」になり、すべてのバージョンで使用できます。

判定用の列を作成しない (ラムダ)

判定用の列を作成しないで平均を求めるには「MAP 関数」を使用します。複雑なので詳細は関数のページをご覧ください。

=AVERAGE(
MAP(B3:B7,C3:C7,D3:D7,
LAMBDA(b,c,d,
IF(OR(b="エクセル",c=365),d,FALSE))))

MAP 関数」に条件を入力します。OR 条件にしたり、「EXACT 関数」を使用して大文字小文字を区別できます。

ラムダは 365 で使用できます。

解説

引数「平均範囲」が日付なら、日付の実際の値は数値なのでその値を計算します。

引数「平均範囲」に文字列や TRUE や FALSE、空のセルが含まれるときは、そのセルを無視します。

引数「平均範囲」に 1 つも有効な数値が含まれていないときはエラー #DIV/0! になります。

引数「条件範囲」を複数指定したときは、すべての条件に一致するセルの平均になります。AND 条件です。

引数「条件範囲」に一致するセルが 1 つもないときはエラー #DIV/0! になります。

引数「平均範囲」と引数「条件範囲」の大きさが違うときはエラー #VALUE! になります。

引数「条件」に比較演算子を入力するときは "" で囲んで入力します。

引数「条件」に比較演算子を省略した "エクセル""=エクセル" と同じ条件になります。

引数「条件」にセル参照を入力するときは "比較演算子"&セル名 のように & で比較演算子とセル名を結合します。

引数「条件」に日付を入力するときは「DATE 関数」を使用します。時刻を入力するときは「TIME 関数」を使用します。"="&DATE(2000,1,1) のように & で比較演算子と結合します。

引数「条件」は大文字と小文字を区別しません。 "=ABC" としたときは abc などと一致します。