概要
「一部のセルがエラーだけど、それを無視して合計だけ出したい」
「#DIV/0! や #N/A が混ざっていても、平均や最大値を普通に計算したい」
こういうときに、IFERROR で一つひとつ式を直さなくても
一発で「エラーを除外して集計」してくれるのが AGGREGATE 関数です。
AGGREGATE は
「どの集計関数を使うか(合計・平均・最大など)」
「何を無視するか(エラー、非表示行など)」
を指定できる高機能な集計関数です。
ここでは「エラーを除外して集計」というテーマに絞って、やさしく解説します。
AGGREGATE の基本
基本の書式
AGGREGATE には2つの書き方がありますが、
ここでは一番よく使う「範囲に対する集計」の形だけに絞って説明します。
書式は次のとおりです。
=AGGREGATE(集計の種類, オプション, 範囲)
集計の種類
どの関数で集計するかを番号で指定します。
代表的なものだけ挙げると、次のような対応です。
1 平均(AVERAGE)
2 個数(COUNT)
3 個数(空白以外)(COUNTA)
4 最大値(MAX)
5 最小値(MIN)
9 合計(SUM)
オプション
「何を無視するか」を指定します。
エラーを無視したいときは
6 エラー値を無視
7 非表示行とエラー値を無視
を主に使います。
範囲
集計したいセル範囲です。
例:A2:A10 など。
「エラーを無視する」という指定
エラーを除外して集計したいときに一番大事なのは、オプションです。
エラーだけ無視したい
オプションに 6 を指定します。
例:
=AGGREGATE(9, 6, A2:A10)
非表示行もエラーも両方無視したい
オプションに 7 を指定します。
例:
=AGGREGATE(9, 7, A2:A10)
ひとまず「エラー除外」だけなら、
オプションは 6 と覚えておけば大丈夫です。
エラーを除外して合計する
SUM の代わりに AGGREGATE を使う
例えば、A2:A10 に数値が入っていて、
一部に #DIV/0! や #N/A が混ざっているとします。
普通に合計すると、こうなります。
=SUM(A2:A10) ' エラーが1つでもあると式全体がエラー
AGGREGATE を使って「エラーを無視して合計」するには、
集計の種類に 9(SUM)、オプションに 6(エラーを無視)を指定します。
=AGGREGATE(9, 6, A2:A10)
動きはこうです。
正常な数値セル
そのまま合計に含める
エラーのセル
存在しないものとして無視する
IFERROR で一つずつ直さなくても、
この 1 式で範囲内のエラーをまとめてスキップできます。
エラーを除外して平均・最大・最小を出す
平均(AVERAGE)の代わりに
A2:A10 の平均を出したいが、
一部にエラーが混ざっている場合。
普通の AVERAGE だと、エラーがあると全体がエラーになります。
=AVERAGE(A2:A10)
AGGREGATE で「エラーを除外した平均」を取りたいときは
集計の種類に 1(AVERAGE)を指定します。
=AGGREGATE(1, 6, A2:A10)
これで
数値だけで平均
エラーセルは完全に無視
という動きになります。
最大値・最小値のとき
最大値(MAX)
集計の種類 4
=AGGREGATE(4, 6, A2:A10) ' エラーを除外した最大値
最小値(MIN)
集計の種類 5
=AGGREGATE(5, 6, A2:A10) ' エラーを除外した最小値
MAX や MIN でも、エラーが1つ紛れただけで式全体がエラーになりますが、
AGGREGATE ならエラーをスキップしてくれます。
エラーを除外しながら「n番目の大きさ/小ささ」を求める
LARGE / SMALL 相当の使い方
AGGREGATE は、LARGE / SMALL のような
「n番目に大きい値」「n番目に小さい値」も計算できます。
n番目に大きい値(LARGE 相当)は集計の種類 14
n番目に小さい値(SMALL 相当)は集計の種類 15
書式は次のようになります。
=AGGREGATE(14, 6, A2:A10, k) ' エラーを除外して k 番目に大きい値
=AGGREGATE(15, 6, A2:A10, k) ' エラーを除外して k 番目に小さい値
例えば、「エラーを無視して A2:A10 の中で 2番目に大きい値」を求めたいなら、
=AGGREGATE(14, 6, A2:A10, 2)
と書きます。
エラーが混ざっていても、
「数値だけ」を対象に順位付けできるのがポイントです。
AGGREGATE を使うときの考え方と注意点
まずは「普通の関数 → うまく動かない → AGGREGATEに置き換える」
実務の流れとしては、次のように考えると使いやすいです。
まず SUM や AVERAGE、MAX など、普通の関数で書いてみる
エラーが混ざっていて式全体がエラーになる
そのとき初めて、同じ処理を AGGREGATE に置き換える
具体的には、次の対応を覚えておくと便利です。
SUM(A2:A10) がエラーになる → AGGREGATE(9, 6, A2:A10)
AVERAGE(A2:A10) がエラーになる → AGGREGATE(1, 6, A2:A10)
MAX(A2:A10) がエラーになる → AGGREGATE(4, 6, A2:A10)
MIN(A2:A10) がエラーになる → AGGREGATE(5, 6, A2:A10)
全部暗記する必要はなく、
「1=平均、4=最大、5=最小、9=合計」だけでもまずは十分です。
「エラーを 0 として扱う」のとは少し違う
IFERROR(式, 0) でエラーを 0 にする方法と、
AGGREGATE でエラーを除外する方法は、似ているようで動きが違います。
IFERROR(式, 0)
エラーだったセルが 0 の値として存在するイメージ。
その後の SUM などには 0 として含まれる。
AGGREGATE(…, 6, 範囲)
エラーのセルは「無かったこと」になり、
集計から完全に外される。
「エラーを 0 と見なしたい」のか
「エラーは数値として数えたくない」のか
意図に応じて使い分けられるとベストです。
例題
問題1
A2:A10 の中に数値とエラーが混在しています。
エラーを無視して「合計」を計算したいとき、AGGREGATE を使った式を書いてください。
(ヒント:合計=集計の種類 9、エラー無視=オプション 6)
=AGGREGATE(9, 6, A2:A10)
問題2
A2:A10 の中に数値とエラーが混在しています。
エラーを除外して「平均」を求めたいときの AGGREGATE の式を書いてください。
(ヒント:平均=集計の種類 1)
=AGGREGATE(1, 6, A2:A10)
問題3
A2:A10 の中に数値とエラーが混在しています。
エラーを除外して「最大値」を求める AGGREGATE の式を書いてください。
(ヒント:最大=集計の種類 4)
=AGGREGATE(4, 6, A2:A10)
問題4
A2:A10 の中に数値とエラーが混在しています。
エラーを除外して「2番目に大きい値」を求める AGGREGATE の式を書いてください。
(ヒント:LARGE 相当=集計の種類 14、k=2)
=AGGREGATE(14, 6, A2:A10, 2)
問題5
A2:A10 の中に数値とエラーが混在しており、一部の行は非表示になっています。
エラーと「非表示行」の両方を除外して合計したいときの式を書いてください。
(ヒント:合計=9、非表示とエラーを無視=オプション 7)
=AGGREGATE(9, 7, A2:A10)
まとめ
AGGREGATE は、
「エラーが混ざっていても集計を止めたくない」
「エラーや非表示行を除外したうえで合計・平均を取りたい」
というときの強力な味方です。
型としては、まずこの形を押さえておけば十分です。
=AGGREGATE(9, 6, 範囲) ' エラーを除外した合計
=AGGREGATE(1, 6, 範囲) ' エラーを除外した平均
あなたの表の中で「エラーが混ざって SUM や AVERAGE が壊れている列」があれば、
そこを AGGREGATE に差し替えてみてください。
「エラーを除外して集計する」感覚が、一気につかめるはずです。
