ExcelのGROUPBY関数の使い方|グループ集計を一発で作成

スポンサーリンク

売上データを部門ごとに合計したい、担当者ごとの平均単価を出したい。こういったグループ集計、ピボットテーブルを作るほどでもないけど手作業は面倒ですよね。GROUPBY関数を使えば、数式ひとつでグループごとの集計表を自動生成できます。この記事では基本の書き方から複数列でのグループ化、ソート、実務パターンまで丸ごと紹介します。

この記事は次のような人におすすめ

  • 売上や経費データをカテゴリごとにサッと合計・平均したい
  • ピボットテーブルを使わずに数式だけでグループ集計を作りたい
  • GROUPBY関数とPIVOTBY関数の違いを知りたい

GROUPBY関数とは?

GROUPBY(グループバイ)関数は、データの行を指定した列でグループ化し、集計関数を適用して結果を返す関数です。英語の「group by」は「〜ごとにまとめる」という意味で、SQLのGROUP BY句と同じ発想の関数です。

たとえば売上データの「部門」列でグループ化して「金額」列をSUMで合計すれば、部門ごとの売上合計表が数式ひとつで出来上がります。結果はスピル(動的配列)で自動展開されるので、データが増えても数式を修正する必要がありません。

GROUPBY関数はMicrosoft 365(Office 365)専用の関数です。Excel 2021以前のバージョンでは使用できません。

GROUPBY関数の書き方(構文と引数)

基本構文

=GROUPBY(行フィールド, 値, 集計関数, [フィールドヘッダー], [合計の深さ], [並べ替え順], [フィルター配列], [フィールドの関係])

引数の説明

引数必須/省略可説明
行フィールド必須グループ化の基準となる列(カテゴリ列など)
必須集計対象の列(金額列など)
集計関数必須集計に使う関数(SUM, AVERAGE, COUNTなど)
フィールドヘッダー省略可ヘッダー行の扱い。0=なし、1=あり(非表示)、2=あり(表示)、3=自動生成。既定は2
合計の深さ省略可総計・小計の表示。0=なし、1=総計あり、2=総計+小計、-1=総計のみ(データ行なし)。既定は0
並べ替え順省略可結果の並べ替え。0=昇順、1=降順。既定は0(昇順)
フィルター配列省略可行を絞り込むTRUE/FALSEの配列
フィールドの関係省略可0=階層(既定)、1=テーブル形式

NOTE

必須の引数は3つだけです。まずは「行フィールド」「値」「集計関数」の3つを指定する基本形をおさえましょう。

GROUPBY関数の基本的な使い方

1列でグループ集計する

次のような売上データがA1:C11にあるとします(1行目がヘッダー)。

部門商品金額
営業部商品A50000
開発部商品B30000
営業部商品C45000
開発部商品A25000
総務部商品B15000
営業部商品B60000
総務部商品C20000
開発部商品C35000
営業部商品A40000
総務部商品A18000

部門ごとの売上合計を求めるには、次のように書きます。

=GROUPBY(A2:A11,C2:C11,SUM)

結果はスピルで展開され、以下のような表が自動生成されます。

営業部195000
開発部90000
総務部53000

行フィールドにA2:A11(部門列)、値にC2:C11(金額列)、集計関数にSUMを指定しただけです。SUMIFS関数で部門ごとに数式を並べる必要がなくなります。

TIP

集計関数の引数はSUM、AVERAGE、COUNT、MAX、MINなど、通常のExcel関数名をそのまま指定します。カッコは付けません。

ヘッダー付きで集計する

データにヘッダー行が含まれている場合は、ヘッダー行ごと範囲に含めて第4引数を指定すると、結果にもヘッダーが表示されます。

=GROUPBY(A1:A11,C1:C11,SUM,2)

第4引数の「2」は「ヘッダーあり・表示する」を意味します。結果の1行目に「部門」「金額の合計」のようなヘッダーが自動表示されます。

集計関数を変えてみる

集計関数の部分を変えるだけで、さまざまな集計ができます。

=GROUPBY(A2:A11,C2:C11,AVERAGE)

部門ごとの平均金額を求めます。

=GROUPBY(A2:A11,C2:C11,COUNT)

部門ごとの件数を求めます。

=GROUPBY(A2:A11,C2:C11,MAX)

部門ごとの最大金額を求めます。

GROUPBY関数の実務活用パターン

総計行を追加する

第5引数(合計の深さ)に1を指定すると、結果の最後に総計行が追加されます。

=GROUPBY(A2:A11,C2:C11,SUM,,1)

第4引数は省略(既定値を使用)するので、カンマだけ入れています。結果は次のようになります。

営業部195000
開発部90000
総務部53000
総計338000

報告資料に使うときは総計行があると便利ですよね。

結果を降順でソートする

第6引数に1を指定すると、結果が降順(大きい順)に並びます。

=GROUPBY(A2:A11,C2:C11,SUM,,,1)

売上が大きい部門から順に表示されるので、ランキング形式のレポートを作りたいときに使えます。

特定の条件でフィルターする

第7引数にTRUE/FALSEの配列を渡すと、条件に合う行だけを集計対象にできます。たとえば金額が30000以上のデータだけで集計する場合です。

=GROUPBY(A2:A11,C2:C11,SUM,,,,(C2:C11>=30000))

金額が30000未満の行は除外された状態で、部門ごとの合計が計算されます。

複数列でグループ化する

行フィールドに複数列を指定すると、組み合わせでグループ化できます。部門と商品の両方でグループ化して集計する場合は、HSTACK関数で列を結合して渡します。

=GROUPBY(HSTACK(A2:A11,B2:B11),C2:C11,SUM)

結果は「営業部 × 商品A」「営業部 × 商品B」のように、すべての組み合わせごとに集計値が表示されます。

営業部商品A90000
営業部商品B60000
営業部商品C45000
開発部商品A25000
開発部商品B30000
開発部商品C35000
総務部商品A18000
総務部商品B15000
総務部商品C20000

ちょっとピボットテーブルに近い表が、数式だけで作れてしまいます。

LAMBDA関数でカスタム集計する

第3引数にLAMBDA関数を指定すれば、独自の集計ロジックも使えます。たとえば最大値と最小値の差(レンジ)を求める場合です。

=GROUPBY(A2:A11,C2:C11,LAMBDA(x,MAX(x)-MIN(x)))

部門ごとに金額の振れ幅(最大値 – 最小値)が算出されます。標準の集計関数にない計算もLAMBDA関数で自由に定義できるのがGROUPBY関数の強みです。

よくあるエラーと対処法

症状原因対処法
#NAME?エラーExcel 2021以前のバージョンで使用したGROUPBY関数はMicrosoft 365専用です。バージョンを確認してください
#VALUE!エラー行フィールドと値の行数が一致しないグループ化列と集計列の行数を揃えてください。ヘッダーの有無も統一します
#SPILL!エラースピル先のセルにデータが入っている結果が展開されるセル範囲を空にしてください
#CALC!エラー集計関数の指定が正しくないSUM、AVERAGE、COUNTなどの関数名をカッコなしで指定してください。「SUM()」ではなく「SUM」です
想定外のグループが表示される同じに見える値に余分なスペースがあるTRIM関数でスペースを除去してからグループ化してください
結果が1行しか返らない全データが同じグループに分類された行フィールドの列指定が正しいか確認してください

GROUPBY関数とPIVOTBY関数の違い

GROUPBY関数と同時期に追加されたPIVOTBY関数も、データを集計する関数です。一見似ていますが、出力形式がまったく異なります。

項目GROUPBY関数PIVOTBY関数
出力形式縦方向のリスト(行方向に展開)クロス集計表(行と列の2軸で展開)
グループ化の軸行方向のみ(1軸)行と列の2軸
構文の違い行フィールド + 値 + 集計関数行フィールド + 列フィールド + 値 + 集計関数
得意な場面部門ごとの合計・平均などシンプルな集計部門 × 月のクロス集計表
使い分け「〜ごとの合計を縦に並べたい」「〜ごと × 〜ごとの表を作りたい」

「部門ごとの売上合計」のように1軸でまとめたいならGROUPBY関数、「部門 × 四半期」のようにクロス表を作りたいならPIVOTBY関数です。

たとえば同じデータから「部門 × 商品」のクロス集計表を作るなら、PIVOTBY関数のほうが適しています。

=PIVOTBY(A2:A11,B2:B11,C2:C11,SUM)

行に部門、列に商品が並ぶクロス表が出力されます。GROUPBYでは複数列をHSTACKで結合してリスト形式で出すことになるので、見た目の違いを意識して使い分けてください。

SUMIFS関数との比較

グループ集計といえばSUMIFS関数を使っている方も多いですよね。GROUPBY関数との違いを整理します。

項目GROUPBY関数SUMIFS関数
グループの自動認識データから自動でグループを抽出事前にグループ一覧を用意する必要がある
数式の数1つの数式で全グループ分を出力グループ数だけ数式をコピーする
データ増減への対応スピルで自動拡張グループが増えたら数式を追加する必要がある
対応バージョンMicrosoft 365のみExcel 2007以降
処理速度大量データでも高速データ量が多いと重くなることがある

Microsoft 365を使っているなら、グループ集計はGROUPBY関数に置き換えたほうがメンテナンスが楽です。グループが増えても数式を追加する必要がないので、運用コストが大幅に下がります。

まとめ

GROUPBY関数は「データを指定した列でグループ化し、集計結果を一覧で返す」関数です。

  • 行フィールド・値・集計関数の3つを指定するだけで、グループごとの集計表が自動生成される
  • SUM、AVERAGE、COUNT、MAX、MINなど集計関数を切り替えるだけで、さまざまな集計ができる
  • 総計行の追加、降順ソート、フィルターなどオプション引数も充実している
  • 複数列でのグループ化はHSTACK関数と組み合わせる
  • PIVOTBY関数はクロス集計表、GROUPBY関数は縦方向のリスト集計と使い分ける

ピボットテーブルを作るほどでもない日常的なグループ集計は、GROUPBY関数で数式化しておくとデータ更新時も自動で再計算されて便利です。ぜひ試してみてください。

関連記事

関数一覧

Excel関数の一覧は下記の記事で確認できます。

エラー値が表示される場合は、下記の記事も参考にしてみてください。

タイトルとURLをコピーしました