ExcelのPIVOTBY関数の使い方|2軸クロス集計表を数式で

スポンサーリンク

Excelで売上データを「部門 × 月」や「担当者 × 商品」のようにクロス集計したい場面、よくありますよね。ピボットテーブルを作るのは少し手間がかかるし、数式で組もうとするとSUMIFS関数を大量にコピーすることになります。PIVOTBY関数を使えば、たった1つの数式で2軸のクロス集計表を自動生成できます。この記事では基本の書き方から実務で使える応用例、エラー対処法まで丸ごと解説します。

この記事は次のような人におすすめ

  • 「部門 × 商品」のようなクロス集計表を数式だけで作りたい
  • ピボットテーブルより手軽にクロス表を作成したい
  • PIVOTBY関数とGROUPBY関数の違いを知りたい

ExcelのPIVOTBY関数とは?

PIVOTBY(ピボットバイ)関数は、データを行と列の2軸でグループ化し、クロス集計表を自動生成する関数です。「PIVOT(軸)」+「BY(〜で指定)」で、「指定した軸で回転させる」という意味があります。

たとえば売上データの「部門」を行、「商品」を列に配置して「金額」をSUMで合計してみましょう。部門 × 商品のクロス表が数式ひとつで完成します。結果はスピル(動的配列)で出力されます。スピルとは、数式の結果が複数セルに自動展開される機能です。データが増えても数式の修正は不要ですよ。

PIVOTBY関数はMicrosoft 365で利用できる関数です。Excel 2021以前のバージョンでは使用できません。

PIVOTBY関数の書き方(構文と引数)

基本構文

=PIVOTBY(行フィールド, 列フィールド, 値, 集計関数, [ヘッダー], [行集計], [行の並び順], [列集計], [列の並び順], [フィルター配列], [基準])

引数の説明

引数必須/省略可説明
行フィールド必須行の見出しに使う列(部門列など)
列フィールド必須列の見出しに使う列(商品列や月列など)
必須集計対象の列(金額列など)
集計関数必須SUM、AVERAGE、COUNTなどの関数名をカッコなしで指定
ヘッダー省略可0=なし、1=あり(非表示)、2=あり(表示)、3=自動生成
行集計省略可0=なし、1=総計、2=総計+小計。負値で上部に表示
行の並び順省略可並べ替え列を番号で指定。負値で降順
列集計省略可0=なし、1=総計、2=総計+小計。負値で左側に表示
列の並び順省略可並べ替え列を番号で指定。負値で降順
フィルター配列省略可行を絞り込むTRUE/FALSEの配列
基準省略可PERCENTOF使用時の割合基準(0=列合計、1=行合計、2=総計)

NOTE

必須の引数は4つです。まずは「行フィールド」「列フィールド」「値」「集計関数」の基本形をおさえましょう。

PIVOTBY関数の基本的な使い方

次のような売上データがA1:D13にあるとします(1行目がヘッダー)。

部門商品金額
営業部商品A4月50000
開発部商品B4月30000
営業部商品B5月45000
開発部商品A5月25000
総務部商品A4月15000
営業部商品A5月60000
総務部商品B6月20000
開発部商品B6月35000
営業部商品B6月40000
総務部商品A6月18000
開発部商品A4月32000
営業部商品A6月55000

部門 × 商品のクロス集計表を作るには、次のように書きます。

=PIVOTBY(A2:A13,B2:B13,D2:D13,SUM)

結果はスピルで展開され、以下のようなクロス表が自動生成されます。

 商品A商品B
営業部16500085000
開発部5700065000
総務部3300020000

行フィールドにA2:A13(部門列)、列フィールドにB2:B13(商品列)を指定します。値にD2:D13(金額列)、集計関数にSUMを指定すれば完成です。部門と商品の2軸で集計されたクロス表がこれだけで出来上がります。

TIP

集計関数はSUMのほかにAVERAGE、COUNT、MAX、MINなども使えます。カッコは付けずに関数名だけを指定してください。

ヘッダー付きで出力する

ヘッダー行を含めた範囲を指定し、第5引数に3を設定すると、結果にもヘッダーが付きます。

=PIVOTBY(A1:A13,B1:B13,D1:D13,SUM,3)

1行目・1列目に「部門」「商品A」「商品B」のようなヘッダーが自動表示されます。報告用の表を作るときに便利ですよ。

実践的な使い方・応用例

部門 × 商品の売上クロス集計

先ほどの基本例に総計行と総計列を追加してみましょう。第6引数(行集計)と第8引数(列集計)にそれぞれ1を指定します。

=PIVOTBY(A2:A13,B2:B13,D2:D13,SUM,,1,,1)
 商品A商品B総計
営業部16500085000250000
開発部5700065000122000
総務部330002000053000
総計255000170000425000

行と列の両方に総計が付くので、全体の構成がひと目で分かります。省略する引数の位置はカンマだけで飛ばしてくださいね。

担当者 × 月の受注件数マトリクス

データの行フィールドを担当者、列フィールドを月にすれば、担当者ごと・月ごとの件数表が作れます。集計関数をCOUNTに変えるだけです。

=PIVOTBY(A2:A13,C2:C13,D2:D13,COUNT)
 4月5月6月
営業部122
開発部211
総務部102

列フィールドをC列(月)に変えただけで、まったく違うクロス表が出力されます。集計関数を切り替えれば合計・平均・件数など自在に対応できますよ。

カテゴリ × 四半期の売上比率表

PERCENTOF関数と組み合わせると、各セルを「全体に対する割合」で表示できます。第4引数にPERCENTOFを、第11引数(基準)に2(総計基準)を指定します。

=PIVOTBY(A2:A13,B2:B13,D2:D13,PERCENTOF,,,,,,,2)

各セルの値が「総計に対する割合」として表示されます。たとえば営業部 × 商品Aが全体の何%を占めるかがすぐに分かります。構成比の分析をしたいときに試してみてください。

特定条件でフィルターする

第10引数にTRUE/FALSEの配列を渡すと、条件を絞ったクロス集計ができます。金額が30000以上のデータだけで集計する場合です。

=PIVOTBY(A2:A13,B2:B13,D2:D13,SUM,,,,,,(D2:D13>=30000))

条件に合う行だけが集計対象になります。フィルター配列は元データと同じ行数にしてください。

よくあるエラーと対処法

#NAME? エラー

関数名のスペルミス、またはPIVOTBY関数に対応していないバージョンで発生します。PIVOTBY関数はMicrosoft 365専用です。Excel 2021以前ではこのエラーが表示されます。

対処法: バージョンを確認してください。スペルが正しいかもあわせてチェックしましょう。

#VALUE! エラー

行フィールド・列フィールド・値の行数が一致しない場合に発生します。ヘッダーの有無が揃っていないケースが多いです。

対処法: 3つの範囲の行数を揃えてください。ヘッダー行を含めるなら全部含める、除くなら全部除くように統一します。

#SPILL! エラー

スピル先のセル範囲に他のデータが入っている場合に発生します。PIVOTBY関数は行と列の両方向に展開するため、広い範囲が必要です。

対処法: 数式を入力するセルの右下方向に十分な空きスペースを確保してください。

#CALC! エラー

フィルター配列で全行が除外された場合や、空の配列が渡された場合に発生します。

対処法: フィルター条件を見直して、少なくとも1行はTRUEになるようにしてください。

GROUPBYとPIVOTBYの使い分け

PIVOTBY関数と同時期に追加されたGROUPBY関数も、データを集計する関数です。出力形式が大きく異なるので、目的に応じて使い分けましょう。

項目GROUPBY関数PIVOTBY関数
出力形式縦方向のリスト行 × 列のクロス集計表
グループ化の軸行方向のみ(1軸)行と列の2軸
必須引数3つ(行・値・関数)4つ(行・列・値・関数)
得意な場面部門ごとの合計など1軸の集計部門 × 月のクロス表
引数の数8個11個

判断基準はシンプルですよ。

  • 「〜ごとの合計を縦に並べたい」 → GROUPBY関数
  • 「〜ごと × 〜ごとの表を作りたい」 → PIVOTBY関数

たとえば「部門ごとの売上合計」ならGROUPBY関数で十分です。「部門 × 四半期の売上表」のように2つの軸が必要なら、PIVOTBY関数を選びましょう。

PIVOTBYの結果を特定の列で並べ替えたい場合は、SORTBY関数も組み合わせて使えます。

まとめ

PIVOTBY関数は「行と列の2軸でデータをグループ化し、クロス集計表を自動生成する」関数です。

  • 行フィールド・列フィールド・値・集計関数の4つを指定するだけで、クロス表が完成する
  • 総計行・総計列の追加、ソート、フィルターなどオプション引数も充実している
  • PERCENTOF関数と組み合わせれば、構成比の分析もできる
  • 1軸の縦リスト集計ならGROUPBY関数、2軸のクロス表ならPIVOTBY関数と使い分ける
  • Microsoft 365専用の関数なので、バージョンを確認してから使う

ピボットテーブルを作るほどでもないクロス集計は、PIVOTBY関数で数式化しておきましょう。データ更新時も自動で再計算されるので手間が省けます。ぜひ試してみてください。

関連記事

関数一覧

Excel関数の一覧は下記の記事で確認できます。

エラー値が表示される場合は、下記の記事も参考にしてみてください。

タイトルとURLをコピーしました