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

ExcelのGROUPBY関数 — 1つの数式でデータをグループ集計する

|

ExcelのGROUPBY関数 — 1つの数式でデータをグループ集計する

要点GROUPBY(行フィールド, 値, 関数) は、グループ化する列、数値の列、 集計方法を受け取り、完成した集計表をスピルします。=GROUPBY(C2:C1000, D2:D1000, SUM) は地域ごとに合計を返します。誰もがはまる唯一のルール:関数は名前で渡す—— SUM() ではなく SUM——第3引数は値ではなく関数そのものだからです。ピボット テーブルと違い、データが変わった瞬間に再計算され、更新は不要。 UNIQUE + SUMIFS を 1式で置き換えます。Excel 365(2024〜2025年に展開)が必要で、2021以前にはありません。

=GROUPBY(C2:C1000, D2:D1000, SUM)                 ' 地域ごとの売上合計
=GROUPBY(C2:C1000, D2:D1000, AVERAGE)             ' 集計方法を変える — 名前だけ差し替え
=GROUPBY(C2:C1000, D2:D1000, COUNT)               ' 地域ごとの行数
=GROUPBY(B2:C1000, D2:D1000, SUM)                 ' グループ化列を2つ -> 階層になる
=GROUPBY(C2:C1000, D2:D1000, SUM, 0, 0, -2)       ' 合計なし、合計値で降順に並べ替え

30年ものあいだ、Excel でデータを集計するとは、数式の世界を離れることを意味していました。 ピボットテーブル——データが変わった瞬間に古びる手作業のオブジェクトで、右クリックの 更新が要る——を作るか、UNIQUE でカテゴリを並べ、 SUMIFS でそれぞれを合計して集計表を手で組み立てるか、の どちらかです。GROUPBY(2024年)はこの2つの手間を終わらせます。集計表を作るのをやめ、 描写するようになります——グループ化するフィールド、集計する値、その方法を告げれば、 Excel が生きたレポートをスピルします。

この記事でわかること

  • 考え方の軸:レポートを描写すれば、Excel がスピルする
  • 3つの必須引数——そして3番目に潜む罠
  • なぜ SUM() ではなく SUM を渡すのか(No.1のエラー)
  • 2列以上でのグループ化と、複数の値の同時集計
  • 合計の深さ総計と小計を加える
  • SORT で包まずに集計値で並べ替える
  • なぜ UNIQUE + SUMIFS に、そして多くの場合ピボットテーブルにも勝るのか

考え方の軸:レポートは「作る」のではなく「描写する」

ピボットテーブルは、あなたが組み立てるモノです——フィールドを枠にドラッグすると、数式 から切り離され、更新するまで凍りついたセルの塊ができます。GROUPBY は同じ塊を作りますが、 それを生かしておく数式です。名詞から動詞への転換——集計オブジェクトを組み立てる代わりに、 「これでグループ化し、あれを合計する」という一文を書きます。

=GROUPBY(C2:C1000, D2:D1000, SUM)
'        └ グループ化    └ 合計    └ 方法

左から右へ読みます。地域の列でグループ化し、売上の列を合計し、SUM を使う。 結果はスピルし——重複を除いた地域ごとに1行、それぞれの合計、そして総計が並び—— D2:D1000 の値が変わった瞬間に、そのすべての数字が更新されます。更新も、古びたピボット キャッシュもありません。この集計がダッシュボードに供給されるとき、ピボットテーブルではなく GROUPBY に手を伸ばす理由は、まさにこのライブ再計算にあります。

3つの必須引数

それ以外はすべて省略可能です。動く GROUPBY に必要なのは、ちょうど3つ。

=GROUPBY( 行フィールド , 値 , 関数 )
'          何でグループ化  何を集計  どう集計するか
  • 行フィールド — 集計の行になる、重複を除いた値を持つ列(複数可):C2:C1000、 地域の列。
  • — 計算する対象のデータ列:D2:D1000、売上。
  • 関数どう計算するか:SUMAVERAGECOUNTMAXMIN など。

この3つを渡せば、並べ替え済み・重複排除済み・合計付きの表が返ります。ただし、その3番目の 引数こそ、誰もが最初につまずくところです。

No.1の罠:SUM() ではなく SUM を渡す

関数 引数は値ではなく——関数そのもので、GROUPBY が各グループに適用できるよう、 名前で手渡します。使った結果ではなく、道具そのものを渡すのです。

=GROUPBY(C2:C1000, D2:D1000, SUM)        ' 正解 — 関数の名前
=GROUPBY(C2:C1000, D2:D1000, SUM())      ' 誤り — #CALC!/エラー、データなしで呼び出している
=GROUPBY(C2:C1000, D2:D1000, SUM(D:D))   ' 誤り — これは1つの数値であって、関数ではない

ここでの SUM は、完成したケーキではなくレシピを手渡すようなものだと考えてください。 GROUPBYSUM というレシピを受け取り、裏側で地域ごとに一度ずつ実行します。SUM()SUM(D2:D1000) と書くと、GROUPBY がグループを見る前にすべてが単一の値に潰れてしまい、 それはまさに望まない結果です。ルール:第3引数は常に裸の関数名——SUMAVERAGECOUNTPERCENTOF——決して呼び出した形にしない。

2列以上でグループ化する

行フィールド を隣り合う2列に向けると、GROUPBY は階層を作ります——1列目が外側のグループ、 2列目がその内側にネストします。

=GROUPBY(B2:C1000, D2:D1000, SUM)   ' 地域、その中で製品ごとに小計

地域が最上位、その下にインデントして製品が並びます——2つの行フィールドを持つピボット テーブルと同じ形ですが、生きた数式として。列は隣接している必要があります(または HSTACK で連結)。左から右へ、外側から内側のグループとして 読まれます。

複数の値を一度に集計する

を数列に広げると、そのすべてが横並びで集計されます。

=GROUPBY(C2:C1000, D2:E1000, SUM)   ' 地域ごとの売上合計 と 数量合計

いまや各地域の行に、売上と数量の2つの合計が隣り合って表示されます。これは日常のレポート 業務(売上、原価、数量、粗利をすべて地域別に)で、かつてはカテゴリごと・指標ごとに SUMIFS を1本ずつ書いていた場面です。ここでは、 の範囲を広げるだけ育つ1つの数式です。

合計の深さで総計と小計を加える

第5引数 合計の深さ は合計行を制御します。省略すると Excel が自動——総計と、グループ化が 許すところに小計を付けます。代わりに固定することもできます。

=GROUPBY(C2:C1000, D2:D1000, SUM, , 0)    ' 0 = 合計を一切付けない
=GROUPBY(C2:C1000, D2:D1000, SUM, , 1)    ' 1 = 総計のみ
=GROUPBY(B2:C1000, D2:D1000, SUM, , 2)    ' 2 = 総計 + 外側グループごとの小計
=GROUPBY(C2:C1000, D2:D1000, SUM, , -1)   ' 負の値 = 合計を下ではなく上に置く

2つのカンマは フィールドヘッダー(第4引数)を飛ばして 合計の深さ に届かせます。負の値は、 多くの人が見落とす小さくて便利な技です——合計を明細のに移します(-1 は総計のみ、 -2 は小計付き)。ダッシュボードの上部に集計が載り、総計を下端でスクロールアウトさせたく ないときに欲しい挙動です。

集計値で並べ替える — SORT は不要

つい全体を SORT で包んでグループを大きさ順に並べたくなります。 その必要はありません——並べ替え順序 が組み込まれており、グループのラベルだけでなく 結果の列でも並べ替えられます。

=GROUPBY(C2:C1000, D2:D1000, SUM, , , 2)    ' 2列目(合計)の昇順で並べ替え
=GROUPBY(C2:C1000, D2:D1000, SUM, , , -2)   ' 合計の降順 — 大きい地域が先頭

並べ替え順序列番号です:1 はグループ列、2 は最初の集計列、そしての数は その列を降順にします。だから -2 は、おなじみの「大きい順」ランキングを1つの引数で実現 します。GROUPBYSORT で包みたくなったら、たいていこの引数の存在を忘れています。

なぜ UNIQUE + SUMIFS を置き換えるのか

GROUPBY 以前、数式ベースの集計は2ステップでした:重複を除いたカテゴリを並べ、それぞれを 合計する。

' 旧来の2ステップ:
=UNIQUE(C2:C1000)                   ' ステップ1:地域の一覧を得る(下にスピル)
=SUMIFS(D:D, C:C, F2#)              ' ステップ2:その横で地域ごとに SUMIFS

' GROUPBY による置き換え:
=GROUPBY(C2:C1000, D2:D1000, SUM)   ' 両ステップを1式で、合計と並べ替えも込み

旧来のパターンも依然として使えて、知っておく価値があります——ですが GROUPBYUNIQUESUMIFS、並べ替え、合計を1つの式に畳み込み、ずれる余地がありません(2ステップ版 では、UNIQUESUMIFS の列より遠くまでスピルすると、カテゴリを黙って取りこぼします)。 カテゴリ集計値をまとめて欲しいときは GROUPBY がすっきりした道具です。SUMIFS は、 単一の条件付き合計を特定のセルに引き出す用途に残しましょう。

判断

GROUPBY を使うのは、生きたまま他の数式に供給される集計が欲しいとき——ダッシュボードの タイル、データが着くたびに再計算される数字、どこかから参照する表です。ピボットテーブルを 使うのは、対話的に探索したいとき:フィールドをドラッグし、スライサーを足し、ダブル クリックで元の行にドリルダウンする。SUMIFS は「この地域の合計をこの正確なセルに」という 単発の用途に残します。ほぼすべての失敗を防ぐ2つの機械的なルール:第3引数は裸の関数名SUM、決して SUM() ではない)、そして合計・並べ替え・フィルターはすでに手元にある 引数——数式を何かで包む前に、合計の深さ並べ替え順序フィルター配列 に手を伸ばす。 「これを集計して」がオブジェクトではなく数式になった瞬間、レポートは何度もやり直す雑務では なく、自分で自分を保つものになります。

ExcelMaster の使いどころ

GROUPBY は強力ですが、省略可能な引数が位置指定です——カンマを1つ間違えれば、違う引数を 設定してしまいます。ExcelMaster に「地域別の売上合計を、大きい順に、総計付きで」と 伝えれば、=GROUPBY(C2:C1000, D2:D1000, SUM, , 1, -2) を、スキップのカンマまで正しい位置に 置いて書きます。「顧客ごとの平均注文額と注文件数」と頼めば、 を広げて集計方法を選びます。 そして SUM ではなく SUM() と書いて #CALC! を返す GROUPBY を貼り付けても、あるいは UNIQUE + SUMIFS のブロックをまだ手で保守していても、パターンを見抜いて1つの数式に 書き換えます。

よくある質問

Excel の GROUPBY は何をする関数ですか?

GROUPBY(行フィールド, 値, 関数) は、行フィールド の重複を除いた値で行をグループ化し、 一致する 関数SUMAVERAGE など)で集計し、並べ替え・合計済みの集計表を スピルします。ピボットテーブルの基本動作を数式にしたもので、元データが変わるたびに自動で 再計算します。

GROUPBY で SUM() ではなく SUM を渡すのはなぜですか?

第3引数が値ではなく関数だからです。GROUPBY はその関数を各グループに自分で適用するので、 SUM という名前で手渡し、呼び出しは任せます。SUM()SUM(D:D) と書くと、グループごとの 集計ではなく1つの数値かエラーになります。AVERAGECOUNTMAXPERCENTOF、任意の LAMBDA でも同じです。

GROUPBY を合計の大きい順に並べ替えるには?

並べ替え順序 引数(6番目)を使います:=GROUPBY(C2:C1000, D2:D1000, SUM, , , -2)。数値は 列インデックスで——2 が最初の集計列——負の符号で降順になるので、-2 はグループを合計の 大きい順に並べます。数式を SORT で包む必要はありません。

GROUPBY で2列でグループ化し、2つの値を集計できますか?

できます。グループ化を2段にするには 行フィールド に隣り合う2列 (=GROUPBY(B2:C1000, D2:D1000, SUM))を渡すと、1列目が2列目をネストします。2指標にするには を2列に広げると(=GROUPBY(C2:C1000, D2:E1000, SUM))、それぞれが横並びで集計されます。 両方を同時に行えます。

GROUPBY はどの Excel バージョンで使えますか?

GROUPBY は Microsoft 365 の関数で、2024〜2025年にかけて、まず Insider、次に現在のチャネル へと展開されました。Excel 2021、2019、2016、および古いビルドの Excel for the web には ありません=GROUPBY(...)#NAME? を返すなら、お使いのビルドにはまだ搭載されて いません——UNIQUE + SUMIFS パターンが代替策です。

検証環境

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

関連ガイド: ExcelのPIVOTBY関数 · GROUPBY・PIVOTBY 応用編 · ExcelのSUMIFS関数 · ExcelのUNIQUE関数 · ExcelのFILTER関数