[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)
使用例2…[行フィールド]や[値]に離れた列を指定する
[行フィールド]や[値]に離れた列を指定したり、列の順序を入れ替えて指定したいことがあります。そのようなときはHSTACK関数を使用します。この関数は、引数に指定した複数の配列を左右に結合する関数です。
図2ではHSTACK関数使用して、「品番」のセルD2~D13と「地区」のセルB2~B13を「品番」「地区」の順に結合してから、[行フィールド]に指定しています。「品番→地区」の順で階層化された集計表が作成されます。
=GROUPBY(行フィールド, 値, 関数,, [集計深さ])
セルI2 | =GROUPBY(HSTACK(D2:D13,B2:B13),G2:G13,SUM,,2)
[値]にHSTACK関数を指定することもできます。図3ではHSTACK関数を使用して、「数量」のセルE2~E13と「売上」のセルG2~G13を結合し、[値]に指定しています。
セルI2 | =GROUPBY(HSTACK(D2:D13,B2:B13),HSTACK(E2:E13,G2:G13),SUM,,2)
使用例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…別表から表引きしたデータでグループ化する
集計元の表にはID番号しか入力されておらず、ID番号に対応する詳細データは別表に登録されているケースもあるでしょう。GROUPBY関数では、あらかじめID番号による表引きをしておかなくても、[行フィールド]にXLOOKUP関数を指定して、表引きとグループ集計を1つの式で行えます。
図5では、「品番」に対応する「品名」を表引きしてグループ化し、「売上」を集計しています。
セルL2 | =GROUPBY(XLOOKUP(D2:D13,I2:I4,J2:J4),G2:G13,SUM)
使用例5…日付から「月」を取り出してグループ化する
集計元の表の日付をもとに月単位でグループ化する場合も、あらかじめ「月」を計算しておく必要はありません。[行フィールド]にMONTH関数を指定して、日付から「月」を取り出してグループ化します。
セルI2 | =GROUPBY(MONTH(A2:A13),G2:G13,SUM)
使用例6…計算結果を集計する
[値]に四則演算などの数式を指定して、その計算結果を集計することができます。図7では、「品番」ごとに「数量×単価」の計算結果を集計しています。
セルI2 | =GROUPBY(D2:D13,E2:E13*F2:F13,SUM)
また、図8ではHSTACK関数を使用して、セルC2~D13の「ピザ」「パスタ」、および「C2:C13+D2:D13」の「ピザ+パスタ」を集計しています。