-
Home »
-
エクセル関数一覧表 »
-
Excel関数の目次 »
- GROUPBY関数を使って集計する
- SQL(データベース言語)の「GROUP BY」と似ていますが、このページではExcelの関数、GROUPBY関数について書いています。
- Excel for Microsoft 365 で使用することができるようになったGROUPBY関数の使い方を丁寧に説明しています。
引数の使い方も詳細に説明しています。
- 一つの列をグループ化して複数の関数で集計したり、複数の列をグループ化して複数の関数で処理することもできます。
クロス集計をしたい場合はPIVOTBY関数を使います。
更新:2024/12/05;作成:2024/10/29
グループ化して集計などの計算をする
グループ バイ
=GROUPBY(row_fields,values,function,
[field_headers],[total_depth],[sort_order],[filter_array],[field_relationship])
- GROUPBY関数がExcel for Microsoft 365 で使用することができるようになりました。(2024/10/29に確認しました)
現在のチャネルのリリース ノート(Microsoft 365)によると、バージョン 2409 (ビルド 18025.20096),バージョン 2409: 9 月 23 日から使用できるようになったようです。
- GROUPBY関数の引数(現時点では英語表記になっています。)
引数 |
|
意味 |
row_fields |
必須 |
行のデータ |
values |
必須 |
値 |
function |
必須 |
関数 |
field_headers |
省略可 |
ヘッダーの表示方法 |
total_depth |
省略可 |
合計の表示方法 |
sort_order |
省略可 |
並べ替え |
filter_array |
省略可 |
フィルター |
field_relationship |
省略可 |
リレーション |
- row_fields:行のデータはユニークなデータが昇順に並べられます。
複数の列を指定することもできます→列を入れ替えて計算する
- values:複数の列を指定することもできます→複数の関数(AVERAGEとSUM)で計算する
- イータ縮小ラムダ関数で指定します。明示的なLAMBDA関数で指定することもできます。
イータ縮小ラムダ関数「SUM」は、LAMBDA(x,SUM(x)) というLAMBDA関数式の簡略版です。
Helpには下表のように記されています。
値の集計に使用される、明示的または eta の縮小ラムダ (SUM、PERCENTOF、AVERAGE、COUNT など)。
ラムダのベクトルを指定できます。 その場合、出力には複数の集計が含まれます。 ベクターの向きによって、行方向と列方向のどちらをレイアウトするかが決まります。 |
SUBTOTAL関数のように数値で指定しません。またいくつかの関数が選択肢に増えています。
(PERCENTOF、ARRAYTOTEXT、MODE.SNGL、LAMBDA)
複数の計算方法を指定することもできます→複数の関数(AVERAGEとSUM)で計算する
イータ縮小ラムダ関数 |
意味 |
SUM |
合計値 |
PERCENTOF |
構成比率 |
AVERAGE |
平均値 |
MEDIAN |
中央値 |
COUNT |
値の件数 |
COUNTA |
全ての件数 |
MAX |
最大値 |
MIN |
最小値 |
PRODUCT |
掛けた値 |
ARRAYTOTEXT |
文字を区切り文字付で結合する |
CONCAT |
文字を結合する |
STDEV.S |
標準偏差(標本) |
STDEV.P |
標準偏差(母集団全体) |
VAR.S |
分散(標本) |
VAR,P |
分散(母集団全体) |
MODE.SNGL |
最頻値 |
LAMBDA |
任意の計算方法 |
- ここの数式をトレースできるようにデータをリストにしておきますので、ご利用ください。
|
B |
C |
D |
E |
F |
G |
3 |
番号 |
氏名 |
年齢 |
性別 |
血液型 |
得点 |
4 |
1 |
上原嘉男 |
44 |
男 |
O |
91 |
5 |
2 |
森永彩芽 |
58 |
女 |
A |
98 |
6 |
3 |
古田恵 |
41 |
女 |
AB |
61 |
7 |
4 |
太田千恵子 |
34 |
女 |
B |
46 |
8 |
5 |
豊田啓一 |
38 |
男 |
O |
78 |
9 |
6 |
新村遥奈 |
29 |
女 |
A |
76 |
10 |
7 |
坂元彩香 |
38 |
女 |
AB |
68 |
11 |
8 |
坪井尚生 |
45 |
男 |
A |
77 |
12 |
9 |
西原舞 |
47 |
女 |
B |
41 |
13 |
10 |
中野野乃花 |
51 |
女 |
O |
93 |
14 |
11 |
岩渕佳代 |
44 |
女 |
A |
61 |
15 |
12 |
市村将文 |
58 |
男 |
AB |
66 |
16 |
13 |
芦田公平 |
59 |
男 |
A |
90 |
17 |
14 |
高見美姫 |
34 |
女 |
AB |
81 |
18 |
15 |
高山晴彦 |
65 |
男 |
B |
76 |
19 |
16 |
高島嘉子 |
53 |
女 |
A |
85 |
20 |
17 |
蛭田功一 |
46 |
男 |
O |
60 |
21 |
18 |
北奈那 |
42 |
女 |
B |
84 |
22 |
19 |
本田明莉 |
62 |
女 |
A |
66 |
23 |
20 |
東海林真依 |
63 |
女 |
AB |
92 |
- データは「成績表」というテーブルに変換しています。
計算方法に「SUM」を指定しました。
血液型ごとに得点が合計されています。
血液型のデータはユニークなデータが昇順に並べられています。
SORT関数,UNIQUE関数,SUMIF関数での計算が一気にできた感じです。
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0)
- 引数:field_headers:ヘッダーを表示しない、total_depth:合計を表示しない
- イータ縮小ラムダ関数 SUM を明示的なLAMBDA関数 LAMBDA(x,SUM(x)) で指定すると、下図のようになります。
=GROUPBY(成績表[血液型],成績表[得点],LAMBDA(x,SUM(x)),0,0)
- GROUPBY関数が使えないExcel2021では、
L3セルに =SORT(UNIQUE(成績表[血液型]))
M3セルに =SUMIF(成績表[血液型],L4#,成績表[得点])
と計算することができます。
- 引数の「field_headers:ヘッダーの表示方法」には下表の設定ができます。
引数 |
意味 |
0 |
フィールドにフィールド名がないので、表示しない |
1 |
フィールドにフィールド名が含まれているが、表示しません |
2 |
フィールドにフィールド名がないので、生成しない?
(実際は、Excelが勝手にヘッダーを表示します) |
3 |
フィールドにフィールド名が含まれているので、表示します |
- 血液型ごとに得点が合計されています。データは「成績表」というテーブルに変換しています。
- テーブルの場合は、フィールド名は含まれていないので、0と2が設定できます。
2 を指定した場合は 「行フィールド1」「値1」と表示されました。
Excelが勝手に生成する?ということかも?
- テーブルの場合は、フィールド名は含まれていないので、1を指定すると、フィールド名は表示されません。
0を指定するのと同じなので1を指定する意味はないといえそうです。
3を指定すると、データの1つ目がフィールド名とみなされて表示されてしまいます。
テーブルの場合は 3は指定してはいけません。
- データ範囲にフィールド名がある場合は1と3を指定します。
1を指定すると、ヘッダーは表示されません。
3を指定すると、データ範囲に含まれるフィールド名が表示されます。
- データ範囲にフィールド名がない場合は0と2を指定します。
0を表示すると、フィールド名(ヘッダー)は表示されません。
2を指定すると、「行フィールド1」「値1」と表示されました。
Excelが勝手に生成する?ということかも?
- MicrosoftのHelpに下記のような注意事項が書いてあります。
Automatic は、値引数に基づいてデータにヘッダーが含まれていると想定します。
1 番目の値が text で、2 番目の値が数値の場合、データにはヘッダーがあると見なされます。
複数の行または列グループ レベルがある場合、フィールド ヘッダーが表示されます。 |
- 引数のtotal_depth:合計の表示方法 には下表の設定ができます。
省略すると、総計が表示されます。
引数 |
意味 |
0 |
合計なし |
1 |
総計 |
2 |
総計と小計 |
-1 |
上部に総計 |
-2 |
上部に総計と小計 |
- 0-合計なし の場合は合計は表示されません。
- 1-総計 の場合は合計が表示されました。
- 2-総計と小計 小計と総計が表示されます。
ここでは、2つの列でグループ化しています。1つの列では小計が計算できませんので、#VALUE! エラーとなります。
- -1-上部に総計 の場合は上部に合計が表示されます。
- -2-上部に総計と小計 の場合は 小計と総計が上部に表示されます。
- MicrosoftのHelpに下記のような注意事項が書いてあります。
小計の場合、 フィールド には少なくとも 2 つの列が必要です。
フィールドに十分な 列がある場合、2 を超える数値がサポートされます。 |
- 引数は列の位置を指定します。
昇順は正の値、降順は負の値で指定します。
- 並べ替えは列の場所を指定します
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0,1)
ここでは 1 を指定していますので、
血液型が昇順に並べ替えられました。
- この例では -2 としています。
2列目の得点を並べ替えますが、マイナスをつけていますので、降順に並べ替えます。
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0,-2)
- 複数の列を並べ替えることもできます。
=GROUPBY(成績表[性別]:成績表[血液型],成績表[得点],SUM,0,0,{-1,2})
性別の列が1でこの列は降順(-1:負の値)にしています。
血液型のれつが2でこの列は昇順(2:正の値)にしています。
- データをフィルターして計算します。
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0,,成績表[血液型]="O")
成績表[血液型]="O" のデータだけが表示されました。
- 得点が70より大きいデータだけの合計を求めてみました。
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0,,成績表[得点]>70)
- 40才代の人の血液型別合計得点を求めてみます。
40以上、50未満 という条件を(成績表[年齢]>=40)*(成績表[年齢]<50)としました。
=GROUPBY(成績表[血液型],成績表[得点],SUM,0,0,,(成績表[年齢]>=40)*(成績表[年齢]<50))
- field_relationship:リレーション では0-階層(規定) と1-テーブルが指定できます。
- どのような機能なのか今一つ理解できていないので、0-階層 を指定した例を示します。
- 隣接した列を指定するのは何ら問題がないのですが、離れた列や順番を入れ替えたいときはほかの関数を利用します。
CHOOSECOLS関数やHSTCK関数を利用します。
- テーブル「成績表」では性別、血液型の順番になっています。
ここでは血液型。性別の順番に入れ替えたいと思います。
- =GROUPBY(CHOOSECOLS(成績表,{5,4}),成績表[得点],SUM,0,0)
- =GROUPBY(HSTACK(成績表[血液型],成績表[性別]),成績表[得点],SUM,0,0)
- 計算方法にイータ縮小ラムダ関数 PERCENTOF を指定した例です。
=GROUPBY(成績表[血液型],成績表[得点],PERCENTOF,0,1)
- 明示的なLAMBDA関数 LAMBDA(x,y,PERCENTOF(x,y)) で指定した例です。
=GROUPBY(成績表[血液型],成績表[得点],LAMBDA(x,y,PERCENTOF(x,y)),0,1)
- 計算方法にイータ縮小ラムダ関数 MAX を指定した例です。
=GROUPBY(成績表[血液型],成績表[得点],MAX,0,1)
合計欄には最大値が表示されています。「合計」はちょっと違和感があります・・・。
- 明示的なLAMBDA関数 LAMBDA(x,MAX(x)) を指定した例です。
=GROUPBY(成績表[血液型],成績表[得点],LAMBDA(x,MAX(x)),0,1)
計算する列が1列で計算方法が異なる計算を行う(AVERAGEとSUM)
- 複数の列を異なる集計方法で計算することもできます。
ちょっと煩わしい感じですが・・・こんなことも可能です。
ここではテーブルの名前は「成績表W」としています。
- 計算方法にAVERAGE,SUMの2つを指定しています。
引数の値は 成績表W[得点] の一つの列になっています。
つまり、得点の平均値と合計点を計算して表示しています。
HSTACK関数を使うと複数列に表示され、VSTACK関数を使うと複数行に表示されます。
- =GROUPBY(成績表W[血液型],
成績表W[得点],
HSTACK(AVERAGE,SUM))
- =GROUPBY(成績表W[血液型],
成績表W[得点],
VSTACK(AVERAGE,SUM))
計算する列が2列で計算方法が異なる計算を行う(AVERAGEとSUM)
- こんどは、計算する列を2つにした例です。、
CHOOSECOLS(成績表W[[年齢]:[得点]],1,4)
と
HSTACK(成績表W[年齢],成績表W[得点])
のどちらでもよさそうです。
- =GROUPBY(成績表W[血液型],
CHOOSECOLS(成績表W[[年齢]:[得点]],1,4),
HSTACK(AVERAGE,SUM))
- =GROUPBY(成績表W[血液型],
HSTACK(成績表W[年齢],成績表W[得点]),
HSTACK(AVERAGE,SUM))
年齢の平均値と、得点の合計値が計算されています。
- テーブルを範囲に変換して、ヘッダーの表示方法の3を指定すると、わかりやすい表示になります。
範囲の指定時にフィールド名を含めて指定します。
=GROUPBY(F3:F23,
HSTACK(D3:D23,G3:G23),
HSTACK(AVERAGE,SUM),3)
計算する列が3列で計算方法が異なる計算を行う(AVERAGEとAVERAGEとCOUNT)
- このようなこともできます。
行のデータに2列、値に3つ指定し、計算方法に3つ指定しています。
列のフィールド名(J2:N2)は手入力しています。
J3セルには以下の数式を入力しています。
=GROUPBY(HSTACK(F3:F23,E3:E23),
HSTACK(H3:H23,G3:G23,G3:G23),
HSTACK(AVERAGE,AVERAGE,COUNT),1,,,,1)
- Sheet1〜Sheet3のデータを集計することもできます。
ピボットテーブルや統合機能を使って集計することができましたが、GroupBy関数で簡単に複数シートを集計することができます。
- Sheet1〜Sheet3にそれぞれ テーブル1〜テーブル3があります。
これらのデータをGroupBy関数で集計します。
- 列のフィールド名(E2:G2)は入力しています。
E3セルには
=GROUPBY(CHOOSECOLS(VSTACK(テーブル1,テーブル2,テーブル3),1),
CHOOSECOLS(VSTACK(テーブル1,テーブル2,テーブル3),{2,3}),
SUM)
と入力しています。
- VSTACK(テーブル1,テーブル2,テーブル3)
テーブル1〜テーブル3をVSTACK関数で縦に結合しています。
- CHOOSECOLS(VSTACK(テーブル1,テーブル2,テーブル3),1)
行のデータに結合したデータの1列目をCHOOSECOLS関数で指定しています。
- CHOOSECOLS(VSTACK(テーブル1,テーブル2,テーブル3),{2,3})
値には結合したデータの2列目と3列目を指定しています。
- 計算方法は SUM としています。
スポンサードリンク
Home »
エクセル関数一覧表 » GROUPBY関数を使って集計する
PageViewCounter
Since2006/2/27