エクセル入門
PIVOTBY関数(縦軸と横軸でグループ化して集計)

Excelの初心者向け入門解説
公開日:2023-11-19 最終更新日:2025-06-21

PIVOTBY関数(縦軸と横軸でグループ化して集計)


PIVOTBY関数は、行(縦)と列(横)でグループ化し指定された関数によって値を集計します。


行(縦)と列(横)の2軸に沿ったグループ化と、関連する値の集計がサポートされます。
複数の行グループレベル、複数の列グループレベルに対応しています。
総計・小計、並べ替え、フィルター処理もサポートされています。
集計にはイータ縮小ラムダ(eta reduced lambda)または明示的なLAMBDAが使用できます。
・LAMBDAヘルパー関数 ・イータ縮小ラムダ関数 ・イータ縮小ラムダ 使用例と解説

PIVOTBY関数は、ピボットテーブルを関数で作製するものと考えれば良いでしょう。

PIVOTBY関数は縦軸横軸の2軸のグループ化です。
縦の1軸だけのグループ化はGROUPBY関数を使用します。
GROUPBY関数は、行(縦)でグループ化し指定された関数によって値を集計します。行(縦)の軸に沿ったグループ化と、関連する値の集計がサポートされます。複数の行グループレベルに対応しています。総計・小計、並べ替え、フィルター処理もサポートされています。

2024/8時点でこの関数は、365 Insider の新関数です。
その為、機能も未確定であり今後変更の可能性もあります。


PIVOTBY関数の構文

=PIVOTBY(row_fields,col_fields,values,function,field_headers,row_total_depth,row_sort_order,col_total_depth,col_sort_order,filter_array,relative_to)

引数 説明
row_fields
行フィールド
必須
行をグループ化し、行ヘッダーを生成するために使用される値を含む列方向(縦方向)の配列または範囲。
配列または範囲には複数の列を含むことが出来ます。
その場合、出力には複数の行グループ レベルが含まれます。
col_fields
列フィールド
必須
列をグループ化し、列ヘッダーを生成するために使用される値を含む列指向(横方向)の配列または範囲。
配列または範囲には複数の行が含まれる場合があります。
その場合、出力には複数の列グループ レベルが含まれます。
values
必須
集計するデータの列指向の配列または範囲。
配列または範囲には複数の列が含まれる場合があります。その場合、出力には複数の集計が含まれます。
function
関数
必須
「値」を集計するために使用される明示的(LAMBDA関数)またはイータ縮小ラムダ関数を指定。
ラムダのベクトル(配列)を指定できます。
その場合、出力には複数の集計が含まれます。ベクトル(配列)の向きによって行方向/列方向のレイアウトが決まります。
イータ縮小LAMBDAとして以下の関数が入力候補に表示されます。
SUM,AVERAGE,MEDIAN,COUNT,COUNTA,MAX,MIN,PRODUCT,
ARRAYTOTEXT,CONCAT,SRDEV.S,STDEV.P,VAR.S,VAR.P,MODE.SNGL
詳しくは以下を参照してください。
イータ縮小ラムダ(eta reduced lambda)
field_headers
フィールドヘッダー
省略可能
「行フィールド」と「値」にヘッダーがあるかどうか、および結果でフィールド ヘッダーを表示するかどうかを指定する数値。
省略 ::自動。※自動判別なので意図しない結果になる場合があります。
0 : いいえ(ヘッダーなし、ヘッダー生成しない)
1 : はい、表示しません(ヘッダーあり、ヘッダー表示しない)
2 : いいえ、生成します(ヘッダーなし、ヘッダー生成する)
3 : はい、表示します(ヘッダーあり、ヘッダー出力する)
自動では、「値」引数に基づいてデータにヘッダーが含まれていると想定されます。
1番目の値がテキストで 2 番目の値が数値の場合、データにはヘッダーがあるとみなされます。
複数の行または列グループ レベルがある場合、フィールド ヘッダーが自動で表示されます。
row_total_depth
行合計深さ
省略可能
行ヘッダーに合計を含めるかどうかを決定します。
省略 : 自動: 総計と、可能な場合は小計。
0 : 合計なし
1 : 総計
2 : 総計と小計
-1 : 上部に総計
-2 : 上部に総計と小計
小計の場合、フィールドには少なくとも 2つの列が必要です。
フィールドに十分な列がある場合、2より大きい数値がサポートされます 。
row_sort_order
行並べ替え順序
省略可能
省略時は行フィールドの昇順で並べ替えられます。
行をソートする方法を示す数値。
数値(1から始まる)は「行フィールド」の列に対応し、その後に「値」の列が続きます。
数値が負の場合、行は降順/逆順に並べ替えられます。
「行フィールド」のみに基づいて並べ替える場合は、数値のベクトル(配列)を指定できます。
col_total_depth
列合計深さ
省略可能
列ヘッダーに合計を含めるかどうかを決定します。
省略 : 自動: 総計と、可能な場合は小計。
0 : 合計なし
1 : 総計
2 : 総計と小計
-1 : 上部に総計
-2 : 上部に総計と小計
小計の場合、フィールドには少なくとも 2つの列が必要です。
フィールドに十分な列がある場合、2より大きい数値がサポートされます 。
col_sort_order
列並べ替え順序
省略可能
省略時は列フィールドの昇順で並べ替えられます。
列をソートする方法を示す数値。
数値(1から始まる)は「列フィールド」の行に対応し、その後に「値」の行が続きます。
数値が負の場合、列は降順/逆順に並べ替えられます。
「列フィールド」のみに基づいて並べ替える場合は、数値のベクトル(配列)を指定できます。
filter_array
フィルター配列
省略可能
対応するデータ行を対象とするかどうかを示すブール値の列指向(縦方向)1時限配列。
配列の長さは、「行フィールド」と「列フィールド」に提供される配列の長さと一致する必要があります。
relative_to
相対基準
2つの引数を必要とする集計関数を使用する場合、relative_toは、集計関数の2番目の引数に提供される値を制御します。
これは通常、PERCENTOFが関数に提供される場合に使用されます。

使用可能な値は次のとおりです。
0: 列合計 (既定値)
1: 行の合計
2: 総計
3: 親 Col Total
4: 親行合計


注: この引数は、 関数 に 2 つの引数が必要な場合にのみ影響します。
関数にカスタムのラムダ関数を指定する場合は、次のパターンに従う必要があります:
LAMBDA(subset,totalset,SUM(subset)/SUM(totalset))


PIVOTBY関数の使用例と解説

使用例のサンプルデータ

エクセル Excel PIVOTBY関数 LAMBDA関数
日付 分類 品名 売上 利益
2023/11/1 分類A 商品AC 25708 9769
2023/11/1 分類B 商品BB 129196 14212
2023/11/2 分類A 商品AC 93004 27901
2023/11/1 分類B 商品BA 102117 14296
2023/11/1 分類A 商品AB 117078 43319
2023/11/1 分類A 商品AA 10817 2272
2023/11/2 分類A 商品AC 19539 7425
2023/11/1 分類A 商品AC 188970 37794
2023/11/2 分類B 商品BA 52547 6306
2023/11/2 分類B 商品BB 140354 46317
2023/11/1 分類A 商品AA 53516 18731
2023/11/2 分類A 商品AB 93257 14921
2023/11/2 分類A 商品AA 91518 14643
2023/11/1 分類A 商品AB 164701 24705
2023/11/2 分類A 商品AA 123468 38275
2023/11/1 分類A 商品AA 155404 21757
2023/11/2 分類A 商品AB 15125 5445
2023/11/1 分類B 商品BA 187919 56376
2023/11/2 分類B 商品BB 177205 38985
2023/11/2 分類B 商品BA 69459 25005

以下では品名の範囲として、
C1:C21
このようにセル参照しています。
データ範囲をテーブル化して使う場合は、
テーブル1[[#すべて],[品名]]
このように読み替えてください。

エクセル Excel PIVOTBY関数 LAMBDA関数

もちろん、テーブルで使う方が良い場合が多いと思います。
ここでは、テーブル構造化参照の数式では数式文字列が長くなってしまうのでセル参照にしています。


最も単純かつ有用な使い方(UNIQUE+SUMIFS)

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,SUM)

行フィールド C1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
※行フィールドで並べ替えられます。
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
※列フィールドで並べ替えられます。
フィルター配列 省略

商品・日別の売上集計です。
商品の一覧と日付でSUMIFS関数を使うか、ピボッテーブルを使う場面ですが、
PIVOT関数でかなり簡単に作製することができるようになりました。

エクセル Excel PIVOTBY関数 LAMBDA関数

列全体を指定した場合の問題点

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C:C,A:A,D:D,SUM)

ピボットテーブルと同様に、空欄は0集計として出力されてしまいます。
入力範囲がテーブルの場合は構造化参照するので問題になりませんが、
セル範囲の場合はメンテナンス性を考慮しての列指定は使いづらくなります。
FILTER関数と組み合わせたり等の対応も考えられますが、数式が複雑化してしまう懸念があります。
このような場合は範囲をテーブルにしたほうが良いと思います。

複数の列でグループ化

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,,2)

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 : 自動
行合計深さ 2 : 総計と小計
行並べ替え順序 省略 : ※行フィールドで並べ替えられます。
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略 : ※列フィールドで並べ替えられます。
フィルター配列 省略

行フィールドをB:C列で指定しています。
つまり、分類・商品の2段階のグループになります。
(サンプルデータは、商品が分類通してユニークなので商品集計と同じ結果になります。)

複数の値を集計

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:E21,SUM,3)

行フィールド C1:C21
列フィールド A1:A21
D1:E21
関数 SUM
フィールドヘッダー 3 : はい、表示します(ヘッダーあり、ヘッダー出力する)
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略 : ※行フィールドで並べ替えられます。
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略 : ※列フィールドで並べ替えられます。
フィルター配列 省略

売上と利益の2つの値で集計してています。
しかし、列の合計が出力されていません・・・
「列合計深さ」を指定しても出力させることはできませんでした。
これが仕様なのかバグなのか、現時点では不明です。

上部に総計と小計

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,3,-2)

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 3 : はい、表示します(ヘッダーあり、ヘッダー出力する)
行合計深さ -2 : 上部に総計と小計
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 省略

ヘッダーの表示+上部に合計行
個人的な感想になってしまいますが、この組み合わせはあまり見やすいとは思えません。
使う場合は、レイアウトを工夫したほうが良いかもしれません。

降順/逆順で並べ替え

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,,,-2)

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 -2
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略 : ※列フィールドで並べ替えられます。
フィルター配列 省略

行並べ替え順序に -2 を指定しています。
数値(1から始まる)は「行フィールド」の列に対応しています。
※シートの列位置とは関係なく、あくまで「行フィールド」の中での順番になります。
数値が負の場合、行は降順/逆順に並べ替えられます。
上記では、
B列 → 1
C列 → 2
B列は省略で昇順、C列を降順に指定していることになります。

複数列で行を並べ替え

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,,,{-1,-2})

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 {-1,-2}
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略 : ※列フィールドで並べ替えられます。
フィルター配列 省略

行並べ替え順序に {-1,-2} を指定しています。
並べ替えを行フィールドのみで行う場合は、複数の列を指定することが出来ます。
この場合は、並べ替え順序の数値をベクトル(配列)で指定します。
並べ替え順序の数値は、行フィールドと値で通し番号です。
B列 → 1
C列 → 2
D列 → 3
降順/逆順の場合は数値をマイナスで指定します。
※シートの列位置とは関係なく、あくまで「行フィールド」の中での順番です。
※行フィールドと値の両方を指定して並べ替えることはできません。

列を並べ替え

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,,,,,-1)

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略 : ※行フィールドで並べ替えられます。
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 -1
フィルター配列 省略

列並べ替え順序に -1 を指定しています。
並べ替え順序の数値は、行フィールドと値で通し番号です。
A列 → 1
D列 → 2
降順/逆順の場合は数値をマイナスで指定します。
※列(横)で並べ替えることはあまりないと思います。

値で並べ替え

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:C21,A1:A21,D1:D21,SUM,,,3,,2)

行フィールド B1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 3
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 2
フィルター配列 省略

列並べ替え順序に 3 を指定しています。
並べ替え順序の数値は、行フィールドと値で通し番号です。
B列 → 1
C列 → 2
D列 → 3

行並べ替え順序に 2 を指定しています。
並べ替え順序の数値は、列フィールドと値で通し番号です。
A列 → 1
D列 → 2

結果の表を見ても分かりづらいのですが・・・
総計→小計→明細
この順で並べ替えられています。

フィルターで対象データを絞る

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,SUM,,,,,,B1:B21="分類A")

行フィールド C1:C21
列フィールド A1:A21
D1:D21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 B1:B21="分類A"

フィルター配列はFILTER関数の指定と同じ要領になります。
・FILTER関数の書式 ・FILTER関数使用例のサンプルデータ ・FILTER関数の基本 ・空白セルを0ではなく空白にする場合 ・複数条件のフィルター ・関数を使ってフィルター ・横(列)でフィルター ・表示する列を選択する ・FILTER関数の結果を他の関数で使う ・スピルによって新しく追加された関数
行フィールド・値と同じ行数のブール値(TRUE/FALSE)の配列を指定します。
B1:B21="分類A"
これは、21個のTRUE/FALSEの縦配列です。
この配列が FALSE の行は対象外として除外されます。

関数にラムダのベクトル(配列)を指定

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,HSTACK(SUM,AVERAGE))

行フィールド C1:C21
列フィールド A1:A21
D1:D21
関数 HSTACK(SUM,AVERAGE)
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 省略

HSTACKで横方向にしているので、出力も横に展開されています。
ではVSTACKを使うと、

エクセル Excel PIVOTBY関数 LAMBDA関数

VSTACKで縦方向にしているので、出力も縦に展開されています。

行フィールドや値列が連続していない場合

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(HSTACK(E1:E21,A1:A21),B1:B21,C1:C21,SUM)

行フィールド HSTACK(E1:E21,A1:A21)
列フィールド B1:B21
C1:C21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 省略

行フィールドも値列もHSTACK関数で横に結合して引数に指定しています。
IF関数に配列定数を指定して列の配列を作成する方法もあります。

=PIVOTBY(IF({1,0},E1:E21,A1:A21),B1:B21,C1:C21,SUM)

エクセル Excel PIVOTBY関数 LAMBDA関数

行フィールドに数式を指定した場合

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(B1:B21&C1:C21,A1:A21,D1:D21,SUM,3)

行フィールド B1:B21&C1:C21
列フィールド B1:B21
C1:C21
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 省略

B1:B21&C1:C21
分類と品名を文字列結合しています。
元のデータを編集してPIVOTBY関数に入れる事が出来ます。
この時に使用できる関数に特に制限ありません。
当然ですが、VLOOKUPやMATCH+INDEX等の関数も使えます。
ただし、上記の例ではCONCAT関数を使う事は出来ません。
CONCAT関数は、複数の範囲や文字列からのテキストを結合します。ただし、区切り記号は指定できません。CONCAT関数の書式 CONCAT(テキスト1,[テキスト2],…) テキスト1 必須です。結合するテキスト項目。
(CONCAT関数は21行分全てを1つの文字列にしてしまいます。)
ヘッダーを表示する場合は、先頭をヘッダーとして使えるように作成する必要があります。

値に数式を指定した場合

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,ROUND(D1:D21/1000,0),SUM,3)

行フィールド C1:C21
列フィールド B1:B21
ROUND(D1:D21/1000,0)
関数 SUM
フィールドヘッダー 省略 ::自動
行合計深さ 省略 : 自動: 総計と、可能な場合は小計。
行並べ替え順序 省略
列合計深さ 省略 : 自動: 総計と、可能な場合は小計。
列並べ替え順序 省略
フィルター配列 省略

値の列も自由に数式を指定することが出来ます。
ただし、ヘッダーを表示する場合は、先頭をヘッダーとして使えるように作成する必要があります。

関数にLAMBDA関数を指定

イータ縮小ラムダ関数は単純にLAMBDA関数に書き換えることが出来ます。
・LAMBDA関数の構文 ・LAMBDA関数をセルで使う場合の基本 ・LAMBDA関数の「数式の検証」について ・LAMBDA関数をセルで使う場合の使用例 ・パラメーターの省略について ・LAMBDA関数を名前定義に登録 ・再帰関数の作成 ・LET関数内でLAMBDA関数を使用する ・LAMBDA関数にLAMBDA関数を渡す ・LAMBDA関数のネストと変数のスコープ(適用範囲) ・遅延評価によりLAMBDA関数オブジェクト(関数値)を返すことができる関数 ・LAMBDAヘルパー関数について
SUM、AVERAGE、MEDIAN、COUNT、COUNTA、、、
これらは、LAMBDA関数の記述を縮小簡略化した書き方です。
従って、もともとのLAMBDA関数で書き直すことが出来ます。
=GROUPBY(...,イータ縮小関数)

=GROUPBY(...,LAMBDA(x,イータ縮小関数(x)))

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,LAMBDA(x,SUM(x)))
=PIVOTBY(C1:C21,A1:A21,D1:D21,SUM)
どちらでも同じになります。

さらに、LET関数を使ってLAMBDA関数を事前に定義しておき、その関数を使う事も出来ます。

エクセル Excel PIVOTBY関数 LAMBDA関数

=LET(合計,LAMBDA(x,y,SUM(x)*2),
PIVOTBY(C1:C21,A1:A21,D1:D21,合計))


上記では、「合計」という関数を作成してそれを使っています。
独自に作製する関数名をイータ縮小ラムダ関数と同じにすると、その名前で上書きされます。
誤解の元になるので、このような使い方は避けた方が良いでしょう。

LAMBDA関数の第2引数について

PIVOTBY関数の第3引数「関数」に渡す引数は2つ存在します。
以下では、この「関数」に渡す第2引数についての解説になります。
ただし、イータ縮小ラムダには第2引数は渡さません。

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,LAMBDA(x,y,SUM(x)))

LAMBDA関数に第2引数を指定することが出来ます。
上記は第1引数だけを指定した場合と同じです。

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,LAMBDA(x,y,SUM(y)))

SUM(y)としています。
各行の結果が「合計」と同じになっています。

LAMBDA(第1引数,第2引数,計算)
第1引数は各グループごとの計算になります。
第2引数は全体にたいする計算になります。
つまり、
第1引数は各グループごとの配列。
第2引数はデータ全体の配列。

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,LAMBDA(x,y,COUNTA(x)&"-"&COUNTA(y)))
上記のように件数を確認してみると良く分かると思います。

第1引数第2引数は配列の大きさ(件数)が違うので、
第1引数第2引数を直接演算するような式はエラーとなります。

エクセル Excel PIVOTBY関数 LAMBDA関数

第1引数第2引数をそれぞれ別々に集計した後に演算することは問題ありません。

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,LAMBDA(x,y,SUM(x)/SUM(y)))

これは全体に対する構成比の計算になります。
※この記事執筆時点では何故かPERCENTOF関数がまだ降りてきていません…
以下はPERCENTOF関数が降りて来たので追記。

PERCENTOF関数

=PERCENTOF(data_subset,data_all)

SUM(第1引数) / SUM(第2引数)
従って全合計の値が0の場合は「#DIV/0!」のエラーになります。

エクセル Excel PIVOTBY関数 LAMBDA関数

=PIVOTBY(C1:C21,A1:A21,D1:D21,PERCENTOF)
先に掲載したLAMBDAと同じ結果となっています。

relative_to(相対基準)の解説

function 引数に指定する関数が2つの引数(例: PERCENTOF やカスタムの LAMBDA 関数)を必要とする場合に、2番目の引数に渡される集計値の基準を指定します。
これにより、割合や比率の計算において、どの合計値に対する割合を出すのかを制御できます。

これは特に、PERCENTOF を使用して割合や比率を計算する際に非常に重要になります。この引数によって、計算される割合が「列の合計」に対してなのか、「行の合計」に対してなのか、あるいは「全体の総計」に対してなのか、といった基準を柔軟に設定できます。

指定可能な値:
  • 0: 列合計 (既定値)
    • 特徴: 各集計値が、その値が存在する列全体の合計に対する割合として計算されます。
    • 挙動: 例えば、各商品の売上を、その商品が含まれる「月の売上合計」に対する割合として表示したい場合に利用します。列のグループ化が行われている場合、最も内側の列グループの合計が基準となります。
    • 使用例: 四半期ごとの売上データをピボットする際、「各月の製品別売上」を「その月の総売上」に対する割合で表示するケースなど。
  • 1: 行合計
    • 特徴: 各集計値が、その値が存在する行全体の合計に対する割合として計算されます。
    • 挙動: 例えば、各商品の売上を、その商品が含まれる「地域の売上合計」に対する割合として表示したい場合に利用します。行のグループ化が行われている場合、最も内側の行グループの合計が基準となります。
    • 使用例: 各地域の製品別売上データをピボットする際、「各地域での特定製品の売上」を「その地域全体の製品売上」に対する割合で表示するケースなど。
  • 2: 総計
    • 特徴: 各集計値が、ピボットテーブル全体の**総計(グランドトータル)**に対する割合として計算されます。
    • 挙動: 全体の中で各データがどの程度の割合を占めるかを一目で把握したい場合に有効です。列や行の小計は考慮されず、常に全体の合計が基準となります。
    • 使用例: 全期間・全製品・全地域を通じた「各単一セル(例: 特定の月・特定の製品)の売上」が「総売上」の何パーセントに当たるかを知りたい場合など。
  • 3: 親列の合計
    • 特徴: 各集計値が、その値が存在する上位のグループ化された親列の合計に対する割合として計算されます。
    • 挙動: 複数レベルで列がグループ化されている場合に、一つ上の階層のグループ合計を基準として割合を計算します。
    • 使用例: 「年」の下に「月」がグループ化されている場合、「各月の売上」を「その年の売上合計」に対する割合として表示するケースなど。
  • 4: 親行の合計
    • 特徴: 各集計値が、その値が存在する上位のグループ化された親行の合計に対する割合として計算されます。
    • 挙動: 複数レベルで行がグループ化されている場合に、一つ上の階層のグループ合計を基準として割合を計算します。
    • 使用例: 「地域」の下に「都道府県」がグループ化されている場合、「各都道府県の売上」を「その地域の売上合計」に対する割合として表示するケースなど。

  • 既定値: 省略された場合、0: 列合計 として扱われます。

注意事項
  • この relative_to 引数は、function 引数に指定する関数が2つの引数(subset と totalset)を必要とする場合にのみ影響を与えます。
    例えば、SUM や AVERAGE のような単一引数で完結する関数を指定した場合は、この引数は無視されます。
  • function 引数にカスタムのラムダ関数 (LAMBDA 関数) を指定して割合を計算する場合、以下のようなパターンに従って関数を定義する必要があります。
    LAMBDA(subset, totalset, SUM(subset) / SUM(totalset)) ここで、subset は現在のセルが含むデータの範囲を、totalset は relative_to で指定された基準(列合計、行合計など)となるデータの範囲を指します。

relative_to 引数を適切に活用することで、PIVOTBY 関数を用いたデータの集計と分析において、より詳細かつ多様な視点からの割合計算が可能になります。

relative_to 引数の使用例
架空の「地域別の製品販売データ」を使って、relative_to がどのように集計結果に影響するかを見ていきます。
function に PERCENTOF を使って割合を計算する例を示します。

サンプルデータ
以下の販売データを使用します。これをExcelのシート(例: A1:D13)に貼り付けてください。

地域 製品 月または、 売上
関東 A 1月 100
関東 B 1月 150
関東 A 2月 120
関西 A 1月 80
関西 B 1月 110
関西 C 1月 90
東北 A 1月 50
東北 B 2月 70
関東 B 2月 180
関西 A 2月 90
東北 C 2月 60
関東 C 1月 70

基本となる数式(合計表示あり)
以下の数式は、行に「製品」、列に「月」を配置し、各行・列の合計を表示します。relative_to 以外の引数はこのベースで進めます。

=PIVOTBY(B1:B13, C1:C13, D1:D13, PERCENTOF, TRUE, 1, 1, 1, 1, , [relative_toの値])

TRUE (フィールドヘッダー): ヘッダーを表示
1 (row_total_depth): 行の合計(製品ごとの合計)を表示
1 (row_sort_order): 製品名を昇順に並べ替え
1 (col_total_depth): 列の合計(月ごとの合計)を表示
1 (col_sort_order): 月を昇順に並べ替え

行フィールド・列フィールドを複数にした場合の例は、行・列の指定を変更しています。

relative_to = 0 : 列合計に対する割合(画像と同じ状態)
=PIVOTBY(B1:B13, C1:C13, D1:D13, PERCENTOF, TRUE, 1, 1, 1, 1, , 0)

エクセル Excel PIVOTBY関数 LAMBDA関数
※%表示は、セルの表示形式で設定しています。

各セル(データポイント)の値が、そのセルが含まれるピボットされた「列」の合計に対する割合として計算されます。
各月の列の最後に表示される「合計」行が常に100%になります。
これは、その月の売上合計を基準として、各製品がどれだけの割合を占めるかを示しています。
各月の「合計」行の右側にある総計の列(I列)の数字は、その製品の全売上が、データ全体の総売上に対してどれくらいかを教えてくれます。

relative_to = 1 : 行合計に対する割合
=PIVOTBY(B1:B13, C1:C13, D1:D13, PERCENTOF, TRUE, 1, 1, 1, 1, , 1)

エクセル Excel PIVOTBY関数 LAMBDA関数
※%表示は、セルの表示形式で設定しています。

セル(データポイント)の値が、そのセルが含まれるピボットされた「行」の合計に対する割合として計算されます。
各製品の行の最後に表示される「合計」列が常に100%になります。
これは、各製品の全期間の売上を基準として、各月がどれだけの割合を占めるかを示しています。

relative_to = 2 : 総計に対する割合
=PIVOTBY(B1:B13, C1:C13, D1:D13, PERCENTOF, TRUE, 1, 1, 1, 1, , 2)

エクセル Excel PIVOTBY関数 LAMBDA関数
※%表示は、セルの表示形式で設定しています。

各セル(データポイント)の値が、ピボットテーブル全体の「総計」(グランドトータル)に対する割合として計算されます。
どのセルも全体の売上合計を基準とした割合になります。
最終的な「合計の合計」セルが100%になります。これは、個々のセルや小計が、データ全体のどれくらいの割合を占めるかを把握するのに役立ちます。

relative_to = 3 : 親列の合計に対する割合(複数列フィールドが必要)
このオプションは、col_fields に複数の列(例: 年, 月)が指定され、列に階層がある場合に有効です。
数式例: (サンプルデータを拡張し、列に「年」を追加した場合)

=PIVOTBY(B1:B13, HSTACK(A1:A13,C1:C13), D1:D13, PERCENTOF, TRUE, 1, 1, 2, 1, , 3)

エクセル Excel PIVOTBY関数 LAMBDA関数
※%表示は、セルの表示形式で設定しています。
※ピボットは、数値比較しやすいように追加表示したものです。

各地域(親列)内において、各月の売上が、その「地域」における「各製品の全月の売上合計」に対する割合として計算されます。
この設定は、階層化された列を持つピボットテーブルにおいて、各親カテゴリ(例: 地域)の範囲内で、各行の要素(例: 製品)が月ごとにどのように分布しているかを詳しく分析したい場合に非常に有効です。
親カテゴリ内の各要素(製品)の合計を基準とすることで、より具体的な内訳を把握できます。

relative_to = 4 : 親行の合計に対する割合(複数行フィールドが必要)
このオプションは、row_fields に複数の列(例: 地域, 製品)が指定され、行に階層がある場合に有効です。

=PIVOTBY(A1:B13, C1:C13, D1:D13, PERCENTOF, TRUE, 2, 1, 1, 1, , 4)

エクセル Excel PIVOTBY関数 LAMBDA関数
※%表示は、セルの表示形式で設定しています。
※ピボットは、数値比較しやすいように追加表示したものです。

各値が、その値を含む上位の親行の合計に対する割合として計算されます。
各親行(例: 地域)の合計が 100.0% になります。
例えば、「関東地域」の「製品A」の「1月」のセルは、関東地域の1月の売上合計に対する製品Aの1月の売上の割合を示します。
結果の解釈: これは、親グループ(例: 地域)の内訳として、子グループ(例: 製品)がどれくらいの割合を占めるかを視覚的に把握するのに非常に有効です。


Microsoft Support GROUPBY関数
Microsoft Support PIVOTBY関数





同じテーマ「エクセル入門」の記事

複数の文字列を検索して置換するSUBSTITUTE
LAMBDA以降の新関数の問題集
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)
LAMBDA以降の新関数の問題と解説(配列操作関数編)
PY関数(Pythonコードをセル内で実行)
GROUPBY関数(縦軸でグループ化して集計)
PIVOTBY関数(縦軸と横軸でグループ化して集計)
イータ縮小ラムダ(eta reduced lambda)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)
TRANSLATE関数(翻訳) DETECTLANGUAGE関数(言語識別)


新着記事NEW ・・・新着記事一覧を見る

シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ