Deprecated : The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
GROUPBY関数を使って集計する:Excel関数
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