GROUPBY関数 ● グループごとに集計する (2)行フィールドと値の指定方法

[Microsoft 365]

Excelの GROUPBY(グループ・バイ)関数は、表のデータをもとにグループ集計を行う関数です。グループ化する項目は第1引数[行フィールド]で、集計対象の値は第2引数[]で指定します。ここでは[行フィールド]と[]のさまざまな指定方法を紹介します。

GROUPBY関数の基本的な使い方やその他の引数については、以下の記事を参考にしてください。

スポンサーリンク

書式

グループごとに集計する
=GROUPBY(行フィールド, , 関数, [ヘッダー], [集計深さ], [並べ替え], [フィルター], [リレーション])

行フィールド]をグループ化して[関数]で指定した方法で[]を集計します。関数式は、動的配列数式として入力されます。

引数

引数 説明
行フィールド グループ化する列を配列やセル参照で指定する。複数の列を指定可能。
集計対象の列を配列やセル参照で指定する。複数の列を指定可能。
関数 集計方法を指定する。選択肢は SUM、PERCENTOF、AVERAGE、MEDIAN、COUNT、COUNTA、MAX、MIN、PRODUCT、ARRAYTOTEXT、CONCAT、SRDEV.S、STDEV.P、VAR.S、VAR.P、MODE.SNGL、LAMBDA。
ヘッダー 引数[行フィールド][]を指定する際に列見出しを含めて指定したか、戻り値に列見出しを表示するかを次の数値で指定する。省略時はExcelが自動判断する。
0 : [行フィールド][]に列見出しが含まれない。戻り値に列見出しを表示しない。
1 : [行フィールド][]に列見出しが含まれる。戻り値に列見出しを表示しない。
2 : [行フィールド][]に列見出しが含まれない。戻り値に「行フィールド1」「値1」のような列見出しを自動表示する。
3 : [行フィールド][]に列見出しが含まれる。戻り値に列見出しを表示する。
集計深さ 小計や総計を表示するかどうかを次の数値で指定する。省略時はExcelが自動判断する。
0 : 小計や総計を表示しない。
1 : 総計を表示する。
2 : 小計と総計を表示する。
-1 : 上部に総計を表示する。
-2 : 上部に小計と総計を表示する。
並べ替え 並べ替えの基準となる列の番号を、昇順の場合は正数で、降順の場合は負数で指定する。列の番号は、[行フィールド]と[]を横に並べて左から数えた番号で指定する。
省略時は[行フィールド]の昇順で並べ替えられる。
フィルター 集計対象を絞り込むための抽出条件を指定する。
リレーション 行フィールド]が階層になっている状態で[]を基準に並べ替える場合の並べ替え方を次の数値で指定する。
0 : 階層ごとに並べ替える(既定値)。
1 : 階層を無視して並べ替える。

使用例1…基本的なグループ集計

図1では、第1引数[行フィールド]に「地区」と「分類」のセルB2~C13、第2引数[]に「売上」のセルG2~G13を指定して、地区ごと分類ごとに売上を集計しています。地区と分類をひとまとめに「B2:C13」と指定しているので、「地区→分類」の順で階層化された集計表が作成されます。[集計深さ]に「2」を指定しているので、小計と総計が表示されます。

=GROUPBY(行フィールド, , 関数,, [集計深さ])

セルI2 | =GROUPBY(B2:C13,G2:G13,SUM,,2)

図1 地区ごと分類ごとに売上を集計する。
なお、集計結果の「売上」欄(セルK2~K8)には、手動で通貨表示形式が設定してある。

使用例2…[行フィールド]や[値]に離れた列を指定する

行フィールド]や[]に離れた列を指定したり、列の順序を入れ替えて指定したいことがあります。そのようなときはHSTACK関数を使用します。この関数は、引数に指定した複数の配列を左右に結合する関数です。

図2ではHSTACK関数使用して、「品番」のセルD2~D13と「地区」のセルB2~B13を「品番」「地区」の順に結合してから、[行フィールド]に指定しています。「品番→地区」の順で階層化された集計表が作成されます。

=GROUPBY(行フィールド, , 関数,, [集計深さ])

セルI2 | =GROUPBY(HSTACK(D2:D13,B2:B13),G2:G13,SUM,,2)

図2 元表の離れた位置にある列の順番を入れ替えて品番ごと地区ごとに売上を集計する。

]にHSTACK関数を指定することもできます。図3ではHSTACK関数を使用して、「数量」のセルE2~E13と「売上」のセルG2~G13を結合し、[]に指定しています。

セルI2 | =GROUPBY(HSTACK(D2:D13,B2:B13),HSTACK(E2:E13,G2:G13),SUM,,2)

図3 元表の離れた位置にある「数量」「売上」を集計する。

使用例3…テーブルの列を指定する

集計元の表がテーブルの場合、「構造化参照」と呼ばれる方式でセルを指定します。テーブル名が「テーブル1」の場合、「地区」列のセルB2~B13は「テーブル1[地区]」の構造化参照で表せます。

「品番→地区」の順に階層化して「売上」列を集計するには、使用例2と同様にHSTACK関数を使用した場合、次の数式になります。

セルI2 | =GROUPBY(HSTACK(テーブル1[品番],テーブル1[地区]),テーブル1[売上],SUM,,2)

もしくは、CHOOSECOLS関数を使用する方法もあります。「CHOOSECOLS(配列, 列番号1, 列番号2)」のように指定して、[配列]の表から列番号で指定した列を取り出す関数です。

図4では、「品番」がテーブル1の4列目にあり、「地区」がテーブル1の2列目にあるので、「CHOOSECOLS(テーブル1,4,2)」とすると、テーブル1から4列目と2列目を取り出せます。

セルI2 | =GROUPBY(CHOOSECOLS(テーブル1,4,2),テーブル1[売上],SUM,,2)

図4 「品番→地区」でグループ化して「売上」を集計する。数式を入力する際、セルA2~G13をドラッグすると「テーブル1」、セルG2~G13をドラッグすると「テーブル1[売上]」のような構造化参照を自動入力できる。

メモ

テーブルにデータを追加すると瞬時に集計に反映される
集計元が普通の表の場合、GROUPBY関数の引数に具体的なセル番号を指定するので、表にデータが追加されたときにセル番号を修正する手間がかかります。
一方、集計元がテーブルの場合、引数に「○○テーブルの△△列」のような構造化参照を指定するので、データが追加されたときに引数を修正する必要がありません。テーブルに新しいデータが追加されると、瞬時に集計に反映されるので大変便利です。

使用例4…別表から表引きしたデータでグループ化する

集計元の表にはID番号しか入力されておらず、ID番号に対応する詳細データは別表に登録されているケースもあるでしょう。GROUPBY関数では、あらかじめID番号による表引きをしておかなくても、[行フィールド]にXLOOKUP関数を指定して、表引きとグループ集計を1つの式で行えます。

図5では、「品番」に対応する「品名」を表引きしてグループ化し、「売上」を集計しています。

セルL2 | =GROUPBY(XLOOKUP(D2:D13,I2:I4,J2:J4),G2:G13,SUM)

図5 「品番」から「品名」を表引きし、「品名」でグループ化して「売上」を集計する。

使用例5…日付から「月」を取り出してグループ化する

集計元の表の日付をもとに月単位でグループ化する場合も、あらかじめ「月」を計算しておく必要はありません。[行フィールド]にMONTH関数を指定して、日付から「月」を取り出してグループ化します。

セルI2 | =GROUPBY(MONTH(A2:A13),G2:G13,SUM)

図6 「日付」から「月」を取り出し、月単位でグループ化して「売上」を集計する。

使用例6…計算結果を集計する

]に四則演算などの数式を指定して、その計算結果を集計することができます。図7では、「品番」ごとに「数量×単価」の計算結果を集計しています。

セルI2 | =GROUPBY(D2:D13,E2:E13*F2:F13,SUM)

図7 「数量×単価」を集計する。

また、図8ではHSTACK関数を使用して、セルC2~D13の「ピザ」「パスタ」、および「C2:C13+D2:D13」の「ピザ+パスタ」を集計しています。

セルF2 | =GROUPBY(A2:A13,HSTACK(C2:D13,C2:C13+D2:D13),SUM)

図8 「ピザ、パスタ、ピザ+パスタ」を集計する。

スポンサーリンク

関連記事