要点 —
GROUPBYとPIVOTBYは、ピボットテーブルが一手ではできないことを こなす、共通の省略可能な引数群を持ちます:PERCENTOFは関数スロットで構成比を 出し(=GROUPBY(C2:C1000, D2:D1000, PERCENTOF))、関数のHSTACKは複数の指標を一度に返し、同じスロットのLAMBDAは加重平均を組み立て、フィルター配列は選んだ行だけを集計します—— すべて生きたまま。関数の文法を使いこなせば、作業列に手を伸ばすのをやめられます。
=GROUPBY(C2:C1000, D2:D1000, PERCENTOF) ' 各地域の総計に対する構成比
=GROUPBY(C2:C1000, D2:D1000, HSTACK(SUM, AVERAGE, COUNT)) ' 3つの指標を横並びで
=GROUPBY(C2:C1000, D2:D1000, LAMBDA(v, SUM(v)/COUNT(v))) ' カスタム集計
=GROUPBY(C2:C1000, D2:D1000, SUM, , , , (E2:E1000="West")) ' 地域 = West の行だけ
基本の GROUPBY/PIVOTBY の呼び出し——グループ化し、集計し、スピルする——だけで、すでに
日常のピボットテーブルを置き換えます。省略可能な引数こそ、それらがピボットテーブルの先へ
出る場所です。構成比、1つのグリッドに複数の集計、加重平均、行への事前フィルター:どれもここ
では組み込みの引数ですが、ピボットテーブルでは右クリックして設定する雑務(あるいは不可能)
です。そのすべてを解き放つ鍵は、関数 引数が本当は何を受け取るのかを理解することです。
この記事でわかること
PERCENTOFで構成比を一語で——そしてNo.1の罠- 関数を重ねて複数の指標を一度に
- 関数スロットに
LAMBDAを落としてカスタム集計 フィルター配列で集計の前に行をフィルター- エラーを読む:
#CALC!、#FIELD!、#SPILL!はそれぞれ1つの引数を指す
関数スロットは SUM 以外も受け取る
この記事のどの技も、たった1つの考えに支えられています:関数 引数は組み込みの名前に限られ
ません。**名前だけで渡すあらゆる関数(イータ簡約された関数)*を受け取ります——SUM の
ような裸の名前、名前のスタック*、PERCENTOF のような専用ヘルパー、あるいは自分で書く完全な
LAMBDA。このスロットを「列を要約に変える任意の関数」と見た瞬間、応用機能は別々の機能では
なくなり、1つの柔軟な引数になります。
=GROUPBY(rows, values, SUM) ' 組み込みの名前
=GROUPBY(rows, values, PERCENTOF) ' 専用ヘルパー
=GROUPBY(rows, values, HSTACK(SUM, AVERAGE)) ' 複数の名前を一度に
=GROUPBY(rows, values, LAMBDA(v, MAX(v)-MIN(v))) ' 自分の関数
PERCENTOF で構成比を出す
最も要望の多いレポート——「各グループは全体の何割か?」——は一語です。PERCENTOF は各
グループを合計し、全体の合計で割ります。
=GROUPBY(C2:C1000, D2:D1000, PERCENTOF) ' 地域 | 総計に対する構成比(各行、例:0.32)
罠:結果は小数であって、書式設定された百分率ではありません。0.32 は32パーセントですが、
スピルにパーセントの表示形式(Ctrl+Shift+%)を適用するまで、セルは 0.32 と表示します。
これは誰もが一度はまります——数字は正しく、表示が正しくないだけなのに、人は数式が壊れて
いると思い込みます。スピル範囲をパーセント書式にすれば 32% と読めます。割合と合計を一緒に
出したいなら、重ねます:HSTACK(SUM, PERCENTOF) が金額とその割合を隣り合う列で出します。
関数を重ねて複数の指標を一度に
合計・平均・件数のために GROUPBY を3回走らせることはしません——
HSTACK で関数を重ね、1つの数式から3つの結果列を得ます。
=GROUPBY(C2:C1000, D2:D1000, HSTACK(SUM, AVERAGE, COUNT))
' 地域 | 売上合計 | 平均売上 | 注文件数
スタックの各関数が、順に1つの列になります。これはピボットテーブルなら、同じフィールドを
値に3回ドラッグして、それぞれの「集計方法」を変える作業ですが、ここでは1つの式で、欲しい
ヘッダー行のように読めます:SUM, AVERAGE, COUNT。値 を広げるのとの違いに注意:値の列を
増やすと違うデータを同じ方法で集計し、関数を増やすと同じデータを違う方法で集計
します。両方を組み合わせれば、完全な指標グリッドになります。
カスタム集計:関数スロットの LAMBDA
組み込みが1つも合わないとき——加重平均、範囲、トリム値——LAMBDA
を書きます。各グループの値を配列 v として受け取り、返したものがそのまま集計値になります。
=GROUPBY(C2:C1000, D2:D1000, LAMBDA(v, MAX(v) - MIN(v))) ' 各グループ内のばらつき
=GROUPBY(C2:C1000, D2:D1000, LAMBDA(v, TEXTJOIN(", ", 1, v))) ' 合計せず、メンバーを列挙
=GROUPBY(C2:C1000, D2:D1000, LAMBDA(v, SUMPRODUCT(v, w)/SUM(w))) ' 加重平均(w = 重み)
これはピボットテーブルが決して届かない天井です:その「値の集計方法」メニューは固定の一覧
ですが、LAMBDA スロットはあなたが表現できる任意のロジックを走らせます。覚えるべきルール
——LAMBDA はグループの値を1つの引数として受け取り、グループごとに単一の値を返さなければ
ならない。配列を返すと #CALC! になります。加重平均、フィルターした部分集合の中央値、
「最大値をテキストで」——すべてこのスロットに収まります。
集計の前に行をフィルターする
フィルター配列(GROUPBY の7番目の引数)は、データと同じ高さのブール配列を受け取り、
TRUE の行だけを集計します——作業列も、事前フィルターの手順も不要です。
=GROUPBY(C2:C1000, D2:D1000, SUM, , , , (E2:E1000 = "West")) ' West 地域の行だけ
=GROUPBY(C2:C1000, D2:D1000, SUM, , , , (YEAR(A2:A1000) = 2026)) ' 2026年の行だけ
=GROUPBY(C2:C1000, D2:D1000, SUM, , , , (D2:D1000 >= 1000)) ' 1000以上の注文だけ
条件は FILTER のテストのように書きます——列に沿って
TRUE/FALSE を生む比較です。エラーを防ぐ唯一のルール:フィルター配列 は 行フィールド と
値 とまったく同じ高さでなければなりません。データが E2:E999 なのに E2:E1000 を指せば
#VALUE! になります。すべての範囲を同じ高さに保てば、それだけで動きます。これが、元データに
触れずに「今年だけ」「返品を除く」「West と East だけ」の集計を作る方法です。
エラーを読む
これらの関数が投げる3つのエラーは、それぞれ特定の間違いを指します——地図を覚えれば、 デバッグは一瞬です。
#CALC! ' 関数スロットが誤り:SUM ではなく SUM()、または配列を返す LAMBDA
#FIELD! ' フィールド/列の参照がずれている — 多くは フィールドヘッダー の設定ミスで見出しが混入
#SPILL! ' 結果がふさがれている — 数式の下と右のセルを空ける
#VALUE! ' たいてい フィルター配列 がデータと違う高さ
#CALC! はほぼ常に 関数 引数です——呼び出した SUM()、またはグループごとに複数の値を返す
LAMBDA。#FIELD! はデータの形を指し、多くは フィールドヘッダー 引数です:範囲に見出し
セルが含まれるなら、フィールドヘッダー を 1 にして、ラベルがデータとしてグループ化され
ないようにします。#SPILL! は空間の問題であって、論理の問題ではありません——数式は正しく、
落ち先が正しくないのです。そしてフィルター付き集計での #VALUE! は、上で述べた高さの
不一致です。各エラーは謎ではなく、1つの引数を指す道標です。
判断
集計に構成比、複数の指標、カスタム計算、行の部分集合が必要になった瞬間、これらの省略
可能な引数はピボットテーブルに完勝します——ここでは1引数、あちらではメニューを潜るか
行き止まりです。3つのルールを手元に置きます:関数 スロットは裸の名前、名前を重ねた
スタック、またはグループごとに1つの値を返す LAMBDA を取る。PERCENTOF はパーセント書式に
すべき小数を返す。そして フィルター配列 はデータと同じ高さでなければならない。エラーを
地図として読む——#CALC! は関数、#FIELD! は見出し、#SPILL! は空間、#VALUE! はフィルターの
高さ——そうすれば、ピボットテーブルを手元に残す最後の言い訳(凝ったことができる、という点)は
ほぼ消えます。
ExcelMaster の使いどころ
応用の引数は強力で、容赦がありません——配列を返す LAMBDA が1つあれば、全体が #CALC! です。
ExcelMaster に「各地域の売上、その総計に対する割合、そして注文件数」と伝えれば、
=GROUPBY(C2:C1000, D2:D1000, HSTACK(SUM, PERCENTOF, COUNT)) を書き、パーセントの列を書式設定
します。「数量で重み付けした、カテゴリ別の加重平均単価」と頼めば、LAMBDA を組み立てます。
そして数式が #CALC! や #VALUE! を返したときは、このガイドと同じようにエラーを読み——
カンマを数えさせる代わりに、間違っている引数そのものを指します。
よくある質問
GROUPBY や PIVOTBY で構成比を表示するには?
関数 スロットに PERCENTOF を使います:=GROUPBY(C2:C1000, D2:D1000, PERCENTOF)。各
グループの合計を総計で割ります。結果は 0.32 のような小数なので、スピルにパーセント書式
(Ctrl+Shift+%)を適用して 32% と表示します。金額とその割合を並べて出すには、
HSTACK(SUM, PERCENTOF) を使います。
GROUPBY は複数の集計を一度に返せますか?
はい——関数を重ねます:=GROUPBY(C2:C1000, D2:D1000, HSTACK(SUM, AVERAGE, COUNT)) は3つの列を
返します。各関数が順に1つの結果列になります。これは 値 の範囲を広げるのとは違います。広げる
方は違う列を同じ方法で集計しますが、関数を重ねる方は同じ列を複数の方法で集計します。
カスタムの数式を集計に使うには?
関数 スロットに LAMBDA を置きます。各グループの値を配列として受け取り、単一の値を返さ
なければなりません:=GROUPBY(C2:C1000, D2:D1000, LAMBDA(v, MAX(v)-MIN(v)))。これで加重平均、
範囲、そして組み込みの「集計方法」一覧にできないことをすべてカバーします。LAMBDA が単一の値
ではなく配列を返すと、#CALC! になります。
GROUPBY が集計する行をフィルターするには?
フィルター配列 引数(7番目)を使います:
=GROUPBY(C2:C1000, D2:D1000, SUM, , , , (A2:A1000="West")) は、一致する行だけを集計します。
条件は FILTER のテストのように書き、ブール配列はデータと同じ
高さでなければなりません——不一致は #VALUE! を返します。
GROUPBY が #CALC! や #FIELD! を返すのはなぜ?
#CALC! はほぼ常に 関数 引数が誤りです:SUM ではなく SUM()、またはグループごとに1つの値
ではなく配列を返す LAMBDA。#FIELD! はたいてい フィールドヘッダー 引数がずれています——
範囲に見出しセルが含まれるなら 1 に設定し、ラベルがデータとして扱われないようにします。
#SPILL! は論理とは無関係で、下や右のセルが結果をふさいでいる合図です。
検証環境
検証環境: Excel 365(Windows 11)— 最終確認 2026-07-18。
関連ガイド: ExcelのGROUPBY関数 · ExcelのPIVOTBY関数 · ExcelのLAMBDA関数 · LAMBDA ヘルパー関数 · ExcelのFILTER関数
