Excel スピルでクロス集計(データ更新が自動反映)を行う数式

この記事ではスピルでクロス集計を行う数式を紹介します。

この数式はクロス集計の元データが増えると

クロス集計側のシートを編集しなくても自動的に反映されます。

内容的にはピボットテーブルで出来ることと同様で、

そちらで十分であれば必ずしもスピルで実施する必要はありません。

この方法がピボットテーブルに比べて勝っている点は

データの更新を手動で行う必要がない点

同じデータからクロス集計を複数行う場合や

データ更新忘れが致命的な場合にはスピルの方が有効です。

注意点として重い数式なことと最新の機能を使うため

エディションによっては利用できません。

サンプルの説明

サイトのアクセス解析で実施している一部で、

Googleアナリティクス計測のPV数(実際には他の項目も)を

年月・記事でクロス分析しています。(表示している数字はランダムです)

クロス集計結果

Googleアナリティクスからの集計元データは以下のように

年月とURLごとに表になっています。

元データ

手順(数式の説明)

クロス集計の縦方向をURLにしています。そのヘッダー行をA列に作成します。

LET関数なしの場合、A2セルに以下の数式を設定します。

=SORT(UNIQUE(
  FILTER(データ!B:B,(データ!B:B<>"")*(データ!B:B<>"URL"))
))

LET関数ありの場合、A2セルに以下の数式を設定します。

同じセル参照が多いため可能であればこちらが良いでしょう。

=LET(
  URL範囲,データ!B:B,
  SORT(UNIQUE(
    FILTER(URL範囲,(URL範囲<>"")*(URL範囲<>"URL"))
  ))
)

FILTER関数は指定範囲から特定の条件を満たすセル範囲のみ返す関数です。

1つめの引数に範囲を指定し、2つめの引数に条件を指定します。

条件の前半は空白セルの除外で後半はヘッダー(項目)行の除外です

URLの文字列は元データによって変わります。

*は「かつ(AND)」の条件で両方を満たす必要があります。

(URL範囲<>"")*(URL範囲<>"URL")

これにより空白でなく、URLでもないセルが返されます。

UNIQUE関数は指定範囲の重複を除外する関数です。

SORT関数は指定範囲の並び替えを行う関数です。(並び替える必要がなければ不要です)

これにより縦方向(URL)のヘッダー列が完成します。

次に横方向の年月です。そのヘッダー行を1行めに作成します。

LET関数なしの場合、B1セルに以下の数式を設定します。

=TRANSPOSE(SORT(UNIQUE(
  FILTER(データ!A:A,(データ!A:A<>"")*(データ!A:A<>"月(年間)"))
)))

LET関数ありの場合、B1セルに以下の数式を設定します。

=LET(
  年月範囲,データ!A:A,
  TRANSPOSE(SORT(UNIQUE(
  FILTER(年月範囲,(年月範囲<>"")*(年月範囲<>"月(年間)"))
  )))
)

参照範囲と条件以外はURLの数式とほぼ同じですが、

最後にTRANSPOSE関数で縦方向から横方向に入れ替えています。

これにより横方向(年月)のヘッダー行が完成します。

最後に集計データの数式を作成します。B2セルに以下の数式を設定します。

=SUMIFS(
  データ!C:C,
  データ!A:A,B1#,
  データ!B:B,A2#
)

SUMIFS関数で合計していますが、平均(AVERAGEIFS関数)、

最大(MAXIFS関数)、最小(MINIFS関数)、

件数(COUNTIFS関数)でも同様に利用可能です。

B1#とA1#はセル単体ではなくスピル全体の範囲指定です。

これで完成です。A2、B1、B2の3セルのみの数式でクロス集計表が完成します。

もしデータシートに新しい年月やURLが追加されても

自動的にクロス集計表が拡充されます。(ただし手動集計にしていると自動ではなくなります)