【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によるデータ分析スキルを高めてみてください。







0 件のコメント:
コメントを投稿