ExcelのPERCENTOF関数の使い方|全体に対する割合

スポンサーリンク

「この部門は全体の何パーセント?」と聞かれて、電卓で割り算してからセルに打ち直していませんか。データが増えるたびに計算し直すのは地味にストレスですよね。PERCENTOF関数を使えば、全体に対する割合を数式ひとつで自動計算できます。この記事では基本の構文からGROUPBY・PIVOTBYとの組み合わせまで、実例つきで丸ごと紹介します。

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

  • 売上データの構成比を手計算で出していて手間を減らしたい
  • GROUPBY関数やPIVOTBY関数と組み合わせて部門別の割合を一発で求めたい
  • PERCENTOF関数の使いどころとエラー対処法を知りたい

PERCENTOF関数とは?

PERCENTOF(パーセントオブ)関数は、ある数値の合計が全体の合計に対して何パーセントかを返す関数です。英語の「percent of」は「〜に対する割合」という意味で、名前がそのまま機能を表しています。

たとえば「営業部の売上が全社売上の何%か」を求めたいとき、手動なら営業部の合計を全社合計で割りますよね。PERCENTOF関数はこの割り算を自動でやってくれます。戻り値は0〜1の小数値です。セルにパーセンテージ書式を適用すると「45%」のように表示されます。

この関数の真価はGROUPBYやPIVOTBYとの組み合わせにあります。集計関数として渡すだけで、グループごとの構成比を一括計算できます。

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

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

基本構文

=PERCENTOF(データの一部, データの全体)

引数の説明

引数必須/省略可説明
データの一部(data_subset)必須全体のうち、割合を求めたい部分の範囲
データの全体(data_all)必須比較の基準となる完全なデータセット

引数は2つだけです。「一部 ÷ 全体」の構造なので、数式の読み方もシンプルですね。

数学的にはSUM(データの一部)/SUM(データの全体)と同じ計算です。ただしPERCENTOF関数の本領は、GROUPBYやPIVOTBYの集計関数として使うところにあります。単独で使う場面は限定的です。

NOTE

戻り値は小数値(例: 0.45)です。「45%」と表示するにはセルの書式をパーセンテージに変更してください。

PERCENTOF関数の基本的な使い方

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

部門金額
営業部195000
開発部90000
総務部53000
人事部42000
広報部20000

営業部の金額が全体に対して何%かを求めるには、次のように書きます。

=PERCENTOF(B2,B2:B6)

第1引数にB2(営業部の金額)、第2引数にB2:B6(全部門の金額)を指定しました。結果は0.4875と返ります。パーセンテージ書式を適用すると「48.8%」と表示されます。

これはSUM(B2)/SUM(B2:B6)と同じ結果です。単独で使うなら手動の割り算でも十分ですよね。PERCENTOF関数が本当に活躍するのは、次のセクションで紹介するGROUPBYやPIVOTBYとの組み合わせです。

実践的な使い方・応用例

GROUPBYで部門別売上構成比を求める

PERCENTOF関数の最も実用的な使い方が、GROUPBY関数の集計関数として渡すパターンです。

次のような売上データがA1:C101にあるとします(1行目がヘッダー、100行分のデータ)。A列が「部門」、B列が「商品」、C列が「金額」です。

部門ごとの売上構成比を求めるには、次のように書きます。

=GROUPBY(A2:A101,C2:C101,PERCENTOF)

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

営業部0.46
開発部0.28
総務部0.15
人事部0.11

集計関数の部分にSUMやAVERAGEの代わりにPERCENTOFを書くだけです。各部門の金額合計を全体の金額合計で割った構成比が一括で求まります。SUMIFS関数で部門ごとに数式を作って合計で割る、という手間が不要になりますよ。

TIP

結果のセル範囲にパーセンテージ書式を適用すると「46%」「28%」のように見やすくなります。

PIVOTBYで2軸クロス集計に割合を表示する

PIVOTBY関数と組み合わせれば、クロス集計表の値を割合で表示できます。

同じ売上データ(A列: 部門、B列: 商品、C列: 金額)を使って、部門 × 商品のクロス表を構成比で表示してみましょう。

=PIVOTBY(A2:A101,B2:B101,C2:C101,PERCENTOF)
 商品A商品B商品C
営業部0.180.150.13
開発部0.100.120.06
総務部0.080.050.02
人事部0.040.030.04

既定ではすべてのセルが「全体の総計に対する割合」を表示します。PIVOTBYの第11引数(基準)を使うと、割合の基準を切り替えられます。

=PIVOTBY(A2:A101,B2:B101,C2:C101,PERCENTOF,,,,,,, 0)
基準の値意味
0各列の合計に対する割合商品Aの列内での構成比
1各行の合計に対する割合営業部の行内での構成比
2総計に対する割合(既定)全体に対する構成比

たとえば「部門ごとに、その部門の売上を商品別に分解したい」場合は基準に1(行合計)を指定します。営業部の行がすべて合計100%になるイメージです。

HSTACKで合計と割合を同時に表示する

GROUPBYの集計関数にHSTACKで複数の関数をまとめると、件数・合計・構成比を1つの表で並べて表示できます。

=GROUPBY(A2:A101,C2:C101,HSTACK(COUNT,SUM,PERCENTOF),1)
部門件数合計構成比
営業部3518400000.46
開発部2811200000.28
総務部226000000.15
人事部154400000.11

第4引数に1を指定してヘッダーを非表示にしています。HSTACK(COUNT,SUM,PERCENTOF)と書くだけで3種類の集計が横に並びます。件数と合計額を確認しながら構成比も見られるので、報告資料にそのまま使えますよ。

よくあるエラーと対処法

PERCENTOF関数で発生しやすいエラーは#DIV/0!です。原因は主に2つあります。

data_allが空またはゼロの場合: 全体の合計がゼロになるため、ゼロ除算で#DIV/0!が発生します。データ範囲が正しく指定されているか確認してください。

data_allにテキスト値が含まれる場合: PERCENTOF関数はSUMと同様に数値のみを合計します。数値が1つもないとSUMの結果がゼロになり、#DIV/0!エラーになります。対象範囲に数値列を指定しているか確認しましょう。

NOTE

テキスト列しかないデータで「各グループの件数割合」を出したい場合は、回避策としてdata^0を使います。=GROUPBY(A2:A101,B2:B101^0,PERCENTOF)のように書くと、B列の全要素が1に変換されてカウントベースの割合計算になります。

#SPILL!エラー: GROUPBYやPIVOTBYとの組み合わせで、スピル先のセルにデータが入っていると#SPILL!エラーになります。結果が展開される範囲を空けてください。

似た関数との違い・使い分け

PERCENTOF関数の計算自体は、手動の割り算と同じです。使い分けのポイントを整理しましょう。

方法書き方の例特徴
手動の割り算=B2/SUM(B2:B6)どのバージョンでも使える。行ごとに数式を書く必要がある
PERCENTOF単独=PERCENTOF(B2,B2:B6)手動割り算と同等。単独使用のメリットは少ない
GROUPBY + PERCENTOF=GROUPBY(A:A,B:B,PERCENTOF)グループごとの構成比を一括計算。数式1つで完結
PIVOTBY + PERCENTOF=PIVOTBY(A:A,B:B,C:C,PERCENTOF)2軸クロス表で構成比を表示。基準も切り替え可能

PERCENTOF関数を単独で使うなら=B2/SUM(B2:B6)で十分です。わざわざ関数を使う必要はありません。PERCENTOF関数の真価は、GROUPBYやPIVOTBYの集計関数として渡すところにあります。「集計 + 割合計算」を1つの数式にまとめられるのが最大のメリットです。

まとめ

PERCENTOF関数は「全体に対する割合」を求める関数です。構文は=PERCENTOF(データの一部, データの全体)で、引数は2つだけとシンプルです。

単独使用では手動の割り算と変わりませんが、GROUPBYやPIVOTBYの集計関数として渡すことで真価を発揮します。GROUPBY + PERCENTOFで部門別構成比を一括計算できます。PIVOTBY + PERCENTOFでクロス集計表に割合を表示できます。HSTACKとの組み合わせで件数・合計・構成比を横並びで表示することも可能です。

Microsoft 365専用の関数である点に注意が必要ですが、構成比を求める作業が多い方にはぜひ試してほしい関数です。

GROUPBY関数やPIVOTBY関数の詳しい使い方は、それぞれの解説記事もあわせて確認してみてください。

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