PIVOTBY関数 ● 縦横グループ化してクロス集計する (3)関数の指定方法

[Microsoft 365]

Excelの PIVOTBY(ピボット・バイ)関数は、表のデータをもとにクロス集計を行う関数です。集計の計算方法は、第4引数[関数]で指定します。ここでは[関数]のさまざまな指定方法を紹介します。

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

スポンサーリンク

書式

縦横グループ化してクロス集計する
=PIVOTBY(行フィールド, 列フィールド, , 関数, [ヘッダー], [行集計深さ], [行並べ替え], [列集計深さ], [列並べ替え], [フィルター], [対象])

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

引数

引数 説明
行フィールド グループ化して縦軸に配置する項目を配列やセル参照で指定する。複数の項目を指定可能。
列フィールド グループ化して横軸に配置する項目を配列やセル参照で指定する。複数の項目を指定可能。
集計対象の項目を配列やセル参照で指定する。複数の項目を指定可能。
関数 集計方法を指定する。選択肢は 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」「値1」のような項目名を自動表示する。
3 : [行フィールド][列フィールド][]に項目名が含まれる。戻り値に項目名を表示する。
行集計深さ 小計行や総計行を表示するかどうかを次の数値で指定する。省略時はExcelが自動判断する。
0 : 小計行や総計行を表示しない。
1 : 総計行を表示する。
2 : 小計行と総計行を表示する。
-1 : 上部に総計行を表示する。
-2 : 上部に小計行と総計行を表示する。
行並べ替え 行単位で並べ替える際の基準となる項目の列の番号を、昇順の場合は正数で、降順の場合は負数で指定する。列の番号は、[行フィールド]と[]を横に並べて左から数えた番号で指定する。
省略時は[行フィールド]の昇順で並べ替えられる。
列集計深さ 小計列や総計列を表示するかどうかを次の数値で指定する。省略時はExcelが自動判断する。
0 : 小計列や総計列を表示しない。
1 : 総計列を表示する。
2 : 小計列と総計列を表示する。
-1 : 左部に総計列を表示する。
-2 : 左部に小計列と総計列を表示する。
列並べ替え 列単位で並べ替える際の基準となる項目の列の番号を、昇順の場合は正数で、降順の場合は負数で指定する。列の番号は、[列フィールド]と[]を横に並べて左から数えた番号で指定する。
省略時は[列フィールド]の昇順で並べ替えられる。
フィルター 集計対象を絞り込むための抽出条件を指定する。
対象 関数]に「PERCENTOF」のように引数を2つ持つ関数を指定した場合に、2番目の関数に渡す内容を次の数値で指定する。
0 : 列の合計(既定値)
1 : 行の合計
2 : 総合計
3 : 上位の列項目の合計
4 : 上位の行項目の合計

第4引数[関数]の選択肢

PIVOTBY関数の第4引数[関数]は、集計の計算方法を指定するための引数です。「SUM」を指定すれば合計、「AVERAGE」を指定すれば平均、という具合にSUM関数やAVERAGE関数の機能を使用した集計が行われます。ポップヒントの選択肢から選ぶだけで簡単に入力できます。

図1 第4引数[関数]はポップヒントから選択できる。

選択肢には下表の種類があります。表中の「イータ縮小ラムダ」「明示的なLAMBDA関数」については、本記事の最後に解説します。

関数]の選択肢

選択肢(イータ縮小ラムダ) 説明 明示的なLAMBDA関数
SUM 合計 LAMBDA(x,SUM(x))
PERCENTOF 割合 LAMBDA(x,y,PERCENTOF(x,y))
AVERAGE 平均 LAMBDA(x,AVERAGE(x))
MEDIAN 中央値 LAMBDA(x,MEDIAN(x))
COUNT 数値の数 LAMBDA(x,COUNT(x))
COUNTA データ数 LAMBDA(x,COUNTA(x))
MAX 最大値 LAMBDA(x,MAX(x))
MIN 最小値 LAMBDA(x,MIN(x))
PRODUCT LAMBDA(x,PRODUCT(x))
ARRAYTOTEXT 「,」で区切った文字列結合 LAMBDA(x,ARRAYTOTEXT(x))
CONCAT 文字列結合 LAMBDA(x,CONCAT(x))
STDEV.S 不偏標準偏差 LAMBDA(x,STDEV.S(x))
STDEV.P 標本標準偏差 LAMBDA(x,STDEV.P(x))
VAR.S 不偏分散 LAMBDA(x,VAR.S(x))
VAR.P 標本分散 LAMBDA(x,VAR.P(x))
MODE.SNGL 最頻値 LAMBDA(x,MODE.SNGL(x))
LAMBDA 独自に定義した関数

使用例1…基本的なクロス集計

下図では、第1引数[行フィールド]に「商品」、第2引数[列フィールド]に「地域」、第3引数[]に「売上」のセルを指定し、第4引数[関数]に「SUM」を指定しています。縦軸に「商品」、横軸に「地域」が配置され、売上がクロス集計されます。

=PIVOTBY(行フィールド, 列フィールド, , 関数)

セルH2 | =PIVOTBY(E3:E26,B3:B26,F3:F26,SUM)

図2 商品ごと地域ごとに売上を集計する。
集計結果の数値のセル(セル I3~K7)には、手動で桁区切りスタイルが設定してある。

使用例2…平均を求める

クロス集計では合計を求めることがほとんどだと思いますが、PIVOTBY関数では合計以外の計算方法も使えます。下図では、[関数]に「AVERAGE」を指定して、組ごと科目ごとに平均点を求めています。

セルG2 | =PIVOTBY(C3:C26,D3:D26,E3:E26,AVERAGE)

図3 「AVERAGE」を使用して、組ごと科目ごとに平均点を求める。

PIVOTBY関数では、どの種類の計算をした場合も見出しには「合計」「総計」などと表示されます。上のクロス集計表でも、セルJ2とセルG6の見出しに「合計」と表示されています。次の図では、MAP関数LAMBDA関数を使用して、「合計」の文字を「平均」に変えてみました。

セルG2 | =MAP(PIVOTBY(C3:C26,D3:D26,E3:E26,AVERAGE),LAMBDA(x,IF(x="合計","平均",x)))

図4 「合計」の文字を「平均」に変える。

使用例3…データ数を求める

下図では「COUNT」を使用して、受験者数を求めています。COUNT関数は数値データのみを数える関数なので、[]には数値データのセル範囲を指定します。

セルG2 | =PIVOTBY(C3:C26,D3:D26,E3:E26,COUNT)

図5 「COUNT」を使用して、組ごと科目ごとに受験者数を求める。

ちなみに[]に「氏名」欄のセルB3~B26を指定した場合は、[関数]に「COUNTA」を指定します。COUNTA関数は、文字、数値、日付など、あらゆるデータの数を求める関数です。

メモ

「PERCENTOF」で割合を求める場合
関数]に「PERCENTOF」を指定すると割合が求められます。その際にPIVOTBY関数の第11引数[対象]を使うと、どの数値を100%として割合を求めるのかを指定できます。「PIVOTBY関数 ● 縦横グループ化してクロス集計する (1)行/列と値の指定方法」で解説しているので参考にしてください。

使用例4…「最高点と最低点」のように2つの関数を指定する

1列分の[]に対して複数の計算方法で集計するには、HSTACK関数を使用します。この関数は、引数に指定した複数の配列を左右に結合する関数です。

下図では、組ごと科目ごとに得点の最高点、最低点を求めています。

セルG2 | =PIVOTBY(C3:C26,D3:D26,E3:E26,HSTACK(MAX,MIN))

図6 HSTACK関数を使用して「MAX」「MIN」を計算する。

LAMBDA関数とイータ縮小ラムダ

ヘルプによると、PIVOTBY関数の第4引数[関数]には「LAMBDA関数またはetaの縮小ラムダ」を指定するとあります。[関数]のポップヒントには「SUM」「AVERAGE」「COUNT」などの関数名が並びますが、これらはLAMBDA関数の数式を簡略化したもので「イータ縮小ラムダ関数」と呼びます。

例えばイータ縮小ラムダ関数「SUM」は、「LAMBDA(x,SUM(x))」というLAMBDA関数式の簡略版です。PIVOTBY関数の第4引数[関数]には本来「LAMBDA(x,SUM(x))」と記述するところを「SUM」と簡略記述してもよいことになっています。次の2つの数式は同じ結果を戻します。

セルH2 | =PIVOTBY(E3:E26,B3:B26,F3:F26,SUM)

セルH2 | =PIVOTBY(E3:E26,B3:B26,F3:F26,LAMBDA(x,SUM(x)))

図7 [関数]にはイータ縮小ラムダ関数とLAMBDA関数のどちらを指定してもよい。

スポンサーリンク

関連記事