[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)
使用例2…[行フィールド][列フィールド][値]に離れた列を指定する
[行フィールド][列フィールド][値]には、それぞれ複数の項目を指定できます。隣り合った項目の場合は、「D2:E27」のようにひとまとめで指定します。離れた項目を指定したい場合は、HSTACK関数を使用します。この関数は、引数に指定した複数の配列を左右に結合する関数です。
下図ではHSTACK関数を使用して、B列の「地域」とD列の「店舗」を結合してから、[行フィールド]に指定しています。
=PIVOTBY(行フィールド, 列フィールド, 値, 関数)
セル I1 | =PIVOTBY(HSTACK(B2:B27,D2:D27),E2:E27,G2:G27,SUM)
[値]にHSTACK関数を指定することもできます。下図では「数量」のセルと「売上」のセルを結合して、[値]に指定しています。
セル I1 | =PIVOTBY(D2:D27,B2:B27,HSTACK(E2:E27,G2:G27),SUM)
上図のクロス集計表では、数量と売上の区別がつきません。このようなときは、[行フィールド][列フィールド][値]に元表の1行目の項目名のセルを含めて指定し、第5引数[ヘッダー]に「3」を指定すると、下図のように集計表上に「地域」「商品」「数量」「売上」の文字が表示されるので、数値の種類が区別できます。
セル I1 | =PIVOTBY(D1:D27,B1:B27,HSTACK(E1:E27,G1:G27),SUM,3)
メモ
使用例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)
メモ
使用例4…別表から表引きしたデータでグループ化する
集計元の表にはID番号しか入力されておらず、ID番号に対応する詳細データは別表に登録されているケースもあるでしょう。PIVOTBY関数では、あらかじめID番号による表引きをしておかなくても、[行フィールド]や[列フィールド]にXLOOKUP関数を指定して、表引きとクロス集計を1つの式で行えます。
下図では、「店舗ID」に対応する店舗名を表引きして[列フィールド]に指定しています。
セル I1 | =PIVOTBY(C2:C27,XLOOKUP(B2:B27,F2:F5,G2:G5),D2:D27,SUM)
使用例5…日付から「年月」を取り出して月ごとに集計する
集計元の表の日付をもとに年月単位で集計する場合も、あらかじめ元表で「年月」を計算しておく必要はありません。PIVOTBY関数の[行フィールド]で年月を求めればOKです。
セル I1 | =PIVOTBY(TEXT(A2:A27,"yyyy/mm"),B2:B27,F2:F27,SUM)
使用例6…計算結果を集計する
[値]に四則演算などの数式を指定して、その計算結果を集計することができます。下図では、「数量×単価」の計算結果を集計しています。
セル I1 | =PIVOTBY(D2:D27,B2:B27,E2:E27*F2:F27,SUM)
また、下図はXLOOKUP関数を使用して、セルC2~C27の「商品ID」をもとに別表から「単価」を表引きし、求めた「単価」と「数量」の積を集計しています。