【GASクロス集計完全ガイド】Google Apps Scriptで売上分析・レポート作成を自動化する方法

2026年6月5日金曜日

GAS プログラミング

t f B! P L

【GASクロス集計完全ガイド】Google Apps Scriptで売上分析・レポート作成を自動化する方法

旅行先のカフェでノートPCを開きながら作業していると、売上データやアクセスログを整理する場面によく出会います。そんな時に「この集計作業を自動化できたら楽なのに…」と思ったことはありませんか?

そんな悩みを解決してくれるのがGoogle Apps Script(GAS)のクロス集計です。

クロス集計を使いこなせるようになると、単なるデータ整理から一歩進んで、売上分析や業務レポート、ダッシュボード作成まで自動化できるようになります。

この記事では、GASでクロス集計を作成する方法を初心者にもわかりやすく解説しながら、実務レベルで使えるテクニックまで紹介します。


クロス集計とは?GASでデータ分析を行う基本スキル

クロス集計とは、複数の項目を軸にしてデータを集計する分析手法です。

Excelのピボットテーブルを利用したことがある方ならイメージしやすいでしょう。

元データの例


部署    | 担当者 | 売上
営業    | 鈴木   | 100
営業    | 田中   | 200
開発    | 鈴木   | 150

クロス集計後


        鈴木   田中
営業    100    200
開発    150      0

このように「部署 × 担当者」という2つの軸で売上を整理することで、データの傾向をひと目で把握できます。

つまりクロス集計の本質は、行と列を使ってデータを分析しやすい表に変換することです。


GASでクロス集計を作る全体の流れ

クロス集計は次の4ステップで作成できます。

  • 行キーを抽出する
  • 列キーを抽出する
  • 値を集計する
  • 表形式へ変換する

GASでは主に以下の技術を組み合わせます。


reduce
オブジェクト
配列操作
Set

この考え方を理解するだけで、売上分析・アクセス解析・業務レポート作成など幅広い業務に応用できます。


GASクロス集計の基本実装

集計用オブジェクトを作成する


const pivot = {};

data.forEach(row => {

  const rowKey = row[0];
  const colKey = row[1];
  const value = row[2];

  if (!pivot[rowKey]) pivot[rowKey] = {};
  if (!pivot[rowKey][colKey]) pivot[rowKey][colKey] = 0;

  pivot[rowKey][colKey] += value;
});

実行後の内部構造は以下のようになります。


{
  営業: {
    鈴木: 100,
    田中: 200
  },
  開発: {
    鈴木: 150
  }
}

最初は複雑に見えますが、「部署ごとに担当者別売上を保存しているだけ」と考えると理解しやすくなります。


クロス集計結果を表形式に変換する方法

列キー一覧を取得する


const colKeys = [
  ...new Set(
    data.map(row => row[1])
  )
];

担当者名を重複なしで取得できます。

出力用データを作成する


const output = [];

output.push(["部署", ...colKeys]);

for (let rowKey in pivot) {

  const row = [rowKey];

  colKeys.forEach(col => {
    row.push(
      pivot[rowKey][col] || 0
    );
  });

  output.push(row);
}

完成した配列は、そのままスプレッドシートへ出力できます。


実務で使えるGASクロス集計テンプレート


function crossTab() {

  const sheet =
    SpreadsheetApp
      .getActiveSpreadsheet()
      .getActiveSheet();

  const data =
    sheet
      .getDataRange()
      .getValues()
      .slice(1);

  const pivot = {};

  data.forEach(row => {

    const rowKey = row[0];
    const colKey = row[1];
    const value = row[2];

    if (!pivot[rowKey]) pivot[rowKey] = {};
    if (!pivot[rowKey][colKey]) pivot[rowKey][colKey] = 0;

    pivot[rowKey][colKey] += value;
  });

  const colKeys =
    [...new Set(
      data.map(row => row[1])
    )];

  const output = [
    ["部署", ...colKeys]
  ];

  for (let rowKey in pivot) {

    const row = [rowKey];

    colKeys.forEach(col => {
      row.push(
        pivot[rowKey][col] || 0
      );
    });

    output.push(row);
  }

  sheet
    .getRange(
      1,
      1,
      output.length,
      output[0].length
    )
    .setValues(output);
}

このテンプレートを覚えておくだけで、多くの集計業務を自動化できます。


reduceを使ったスマートな書き方

よりモダンなJavaScriptらしい記述にしたい場合はreduceを利用します。


const pivot = data.reduce((acc, row) => {

  const [r, c, v] = row;

  if (!acc[r]) acc[r] = {};
  if (!acc[r][c]) acc[r][c] = 0;

  acc[r][c] += v;

  return acc;

}, {});

コード量が減り、保守性も向上します。


クロス集計の実務活用パターン

売上分析


部署 × 月

担当者別実績管理


担当者 × ステータス

日別件数集計


日付 × 種別

多次元分析


pivot[dept][user][date] += value;

ここまで応用できるようになると、簡易的なBIツールのような分析環境を構築できます。


GASクロス集計のパフォーマンス改善ポイント

大量データを扱う場合は処理速度も重要です。

おすすめ構成


getValues()
↓
reduceで集計
↓
setValues()

避けるべき処理


ループ内で
getValue()
setValue()
を繰り返す

スプレッドシートへのアクセス回数が増えるほど処理速度は低下するため注意しましょう。


初心者がよくハマるミス

キー初期化忘れ


pivot[a][b] += value;

未定義エラーが発生します。

列キーを取得していない

表形式へ変換できなくなります。

undefinedが表示される


pivot[row][col] || 0

必ずデフォルト値を設定しましょう。


まとめ|GASクロス集計を使いこなして分析業務を効率化しよう

クロス集計は単なるデータ整理ではありません。

  • 売上分析
  • 業務レポート作成
  • ダッシュボード構築
  • データ分析の自動化
  • BIツール代替

私自身も大量のスプレッドシートを扱う案件では、まずクロス集計を作って全体像を把握するところから始めます。

GASを学び始めた頃は配列処理の延長だと思っていましたが、クロス集計を理解してからは「データ構造を設計するための技術」だと感じるようになりました。

実務レベルを目指すなら、次の流れを自在に組み立てられるようになりましょう。


group
↓
pivot
↓
sort
↓
output

この考え方を身につければ、Google Apps Scriptによる業務自動化の幅は一気に広がります。

ぜひ今回のサンプルコードを実際に試しながら、GASによるデータ分析スキルを高めてみてください。

このブログを検索

Welcome



旅するWebライター「Hide」のブログへようこそ!

2年間の世界一周を終え、今は旅の思い出を言葉にしながら、AIやプログラミングという新しい冒険を楽しんでいます。最新技術を味方につけて、もっと自由でクリエイティブな発信を続けていきます!

人気の投稿

QooQ