PIVOTBY ● 縦横グループ化してクロス集計する (2)行/列と値の指定方法

[Microsoft 365]

Excelの PIVOTBY(ピボット・バイ)関数は、表のデータをもとにクロス集計を行う関数です。クロス集計の縦横の項目は第1引数[行フィールド]と第2引数[列フィールド]で、集計対象の値は第3引数[]で指定します。ここではこれらの引数のさまざまな指定方法を紹介します。

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 : 上位の行項目の合計

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

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

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

セル I1 | =PIVOTBY(D2:E27,B2:B27,F2:F27,SUM)

図1 分類、商品ごと地域ごとに売上を集計する。
集計結果の数値のセル(セルK2~M6)には、手動で通貨表示形式が設定してある。

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

行フィールド][列フィールド][]には、それぞれ複数の項目を指定できます。隣り合った項目の場合は、「D2:E27」のようにひとまとめで指定します。離れた項目を指定したい場合は、HSTACK関数を使用します。この関数は、引数に指定した複数の配列を左右に結合する関数です。

下図ではHSTACK関数を使用して、B列の「地域」とD列の「店舗」を結合してから、[行フィールド]に指定しています。

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

セル I1 | =PIVOTBY(HSTACK(B2:B27,D2:D27),E2:E27,G2:G27,SUM)

図2 元表の離れた位置にある項目を指定して売上を集計する。

]にHSTACK関数を指定することもできます。下図では「数量」のセルと「売上」のセルを結合して、[]に指定しています。

セル I1 | =PIVOTBY(D2:D27,B2:B27,HSTACK(E2:E27,G2:G27),SUM)

図3 元表の離れた位置にある「数量」「売上」を集計する。地区ごとに数量と売上の集計値が横に並ぶ。集計結果のN列とO列の合計が空欄になるのはバグ?

上図のクロス集計表では、数量と売上の区別がつきません。このようなときは、[行フィールド][列フィールド][]に元表の1行目の項目名のセルを含めて指定し、第5引数[ヘッダー]に「3」を指定すると、下図のように集計表上に「地域」「商品」「数量」「売上」の文字が表示されるので、数値の種類が区別できます。

セル I1 | =PIVOTBY(D1:D27,B1:B27,HSTACK(E1:E27,G1:G27),SUM,3)

図4 クロス集計表に項目名を表示する。集計結果のN列とO列の合計が空欄になるのはバグ?

メモ

合計列を非表示にするには
空欄の合計列を非表示にしたい場合は、PIVOTBY関数の第8引数[列集計深さ]に「0」を指定します。
=PIVOTBY(D1:D27,B1:B27,HSTACK(E1:E27,G1:G27),SUM,3,,,0)

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

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

使用例2と同様の集計を行う場合、次の数式になります。

セル I1 | =PIVOTBY(HSTACK(テーブル1[地域],テーブル1[店舗]),テーブル1[分類],テーブル1[売上],SUM)

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

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

セル I1 | =PIVOTBY(CHOOSECOLS(テーブル1,2,4),テーブル1[分類],テーブル1[売上],SUM)

図5 数式を入力する際、セルA2~G27をドラッグすると「テーブル1」、セルG2~G27をドラッグすると「テーブル1[売上]」のような構造化参照を自動入力できる。

メモ

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

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

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

下図では、「店舗ID」に対応する店舗名を表引きして[列フィールド]に指定しています。

セル I1 | =PIVOTBY(C2:C27,XLOOKUP(B2:B27,F2:F5,G2:G5),D2:D27,SUM)

図6 「店舗ID」から店舗名を表引きして集計する。

使用例5…日付から「年月」を取り出して月ごとに集計する

集計元の表の日付をもとに年月単位で集計する場合も、あらかじめ元表で「年月」を計算しておく必要はありません。PIVOTBY関数の[行フィールド]で年月を求めればOKです。

セル I1 | =PIVOTBY(TEXT(A2:A27,"yyyy/mm"),B2:B27,F2:F27,SUM)

図7 「日付」から「年月」を取り出して集計する。

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

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

セル I1 | =PIVOTBY(D2:D27,B2:B27,E2:E27*F2:F27,SUM)

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

また、下図はXLOOKUP関数を使用して、セルC2~C27の「商品ID」をもとに別表から「単価」を表引きし、求めた「単価」と「数量」の積を集計しています。

セル I1 | =PIVOTBY(C2:C27,B2:B27,XLOOKUP(C2:C27,F2:F5,G2:G5)*D2:D27,SUM)

図9 別表から表引きした「単価」に「数量」を掛けて集計する。

スポンサーリンク

関連記事