GAS グルーピング完全ガイド|Google Apps Scriptでreduce集計・GROUP BY処理を実務レベル解説
GAS(Google Apps Script)を書き始めると、最初は「データ取得」「自動入力」「メール送信」あたりで便利さを感じます。
でも、実務で本当に差がつくのはその先。
大量データを整理・分析・集計できるようになると、一気に「業務改善できる人」の領域に入ります。
その中心になる技術が今回紹介するグルーピング(Grouping)です。
旅行で例えるなら、バラバラに撮った旅写真を「国別」「都市別」「日付別」で整理する感覚。 データも同じで、意味のある単位にまとめることで初めて価値が生まれます。
GASのグルーピングとは?Google Apps Script集計の基本
グルーピングとは、 「同じ属性を持つデータをまとめる処理」です。
SQLを触ったことがある人なら、GROUP BYをイメージすると理解しやすいでしょう。
グルーピング前
[
["A",100],
["B",200],
["A",150]
]
グルーピング後
{
"A":[100,150],
"B":[200]
}
「Aに属するデータ」「Bに属するデータ」が整理されました。
この考え方は実務で頻繁に登場します。
- カテゴリ別売上集計
- 担当者別件数管理
- 日別アクセス分析
- 商品別ランキング
- 月次レポート作成
GASを業務改善に使うなら、ほぼ避けて通れない技術です。
GAS グルーピング基本構文(reduce使用)
Google Apps Scriptでは、reduce()を使う方法が最も実践的です。
基本テンプレート
const grouped = data.reduce((acc,row)=>{
const key = row[0];
if(!acc[key]){
acc[key]=[];
}
acc[key].push(row);
return acc;
},{});
重要ポイント
- acc → 集計結果を保存
- key → グループの基準
- push() → データ追加
最初は少し難しく見えます。 でも慣れると、ほとんどのデータ加工をreduce一発で書けるようになります。
Google Apps Script グルーピング実践例
カテゴリ別データ整理
const data = [
["A",100],
["B",200],
["A",150]
];
const grouped = data.reduce((acc,row)=>{
const key=row[0];
if(!acc[key]){
acc[key]=[];
}
acc[key].push(row[1]);
return acc;
},{});
結果:
{
"A":[100,150],
"B":[200]
}
現場ではこういう処理が本当に多いです。 データをそのまま扱うより、一度グループ化すると分析しやすくなります。
GAS 集計処理(SUM・GROUP BY風処理)
実務で特に使うのが「グルーピング+合計」です。
const result = data.reduce((acc,row)=>{
const key=row[0];
const value=row[1];
if(!acc[key]){
acc[key]=0;
}
acc[key]+=value;
return acc;
},{});
結果:
{
"A":250,
"B":200
}
SQLでいうと以下と同じ考え方です。
SELECT key,SUM(value)
GROUP BY key
GASでここまで書けるようになると、わざわざSQLを組まなくても十分な場面が増えてきます。
GAS スプレッドシート実務例|売上集計
実際の現場を想像してみます。
ECサイト売上をカテゴリごとに集計したいケース。
function grouping(){
const sheet =
SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet();
const data=
sheet.getDataRange()
.getValues();
const result=
data.slice(1)
.reduce((acc,row)=>{
const category=row[0];
const amount=row[1];
if(!acc[category]){
acc[category]=0;
}
acc[category]+=amount;
return acc;
},{});
Logger.log(result);
}
処理の流れ
- シート取得
- データ取得(getValues)
- reduceでカテゴリ集計
- ログ出力
ポイントは「配列内で完結させる」こと。 GASはシート操作が遅いので、余計な読み書きを減らすほど高速になります。
GAS グルーピング結果をsetValuesする方法
reduceの結果はオブジェクトになります。 そのままシートへ書き込めません。
配列へ変換
const output=
Object.entries(result);
結果:
[
["A",250],
["B",200]
]
シートへ出力
sheet
.getRange(
1,
1,
output.length,
2
)
.setValues(output);
ここまでできると、自動集計レポートも簡単に作れます。
複数キーのグルーピング(実務上級)
カテゴリだけでは足りない場面もあります。
例えば、 「カテゴリ+日付」で集計したいケース。
const grouped =
data.reduce((acc,row)=>{
const key=
row[0]+"_"+row[2];
if(!acc[key]){
acc[key]=0;
}
acc[key]+=row[1];
return acc;
},{});
結果:
"A_2026-05-20":300
日次売上分析や広告運用レポートではかなり使います。
ネストグルーピング(クロス集計の基礎)
const grouped=
data.reduce((acc,row)=>{
const category=row[0];
const user=row[1];
const value=row[2];
if(!acc[category]){
acc[category]={};
}
if(!acc[category][user]){
acc[category][user]=0;
}
acc[category][user]+=value;
return acc;
},{});
結果:
{
"A":{
"鈴木":100,
"田中":200
}
}
担当者別・部署別・カテゴリ別。 クロス集計の土台になります。
sortと組み合わせてランキング作成
const result=
Object.entries(grouped)
.sort(
(a,b)=>b[1]-a[1]
);
売上ランキングや人気商品一覧も作れます。
GAS グルーピングでよくあるミス
初期化忘れ
acc[key]+=value
初回追加時にエラーになります。
存在しない列参照
row[10]
undefinedが発生します。 列番号を確認しましょう。
二次元配列を忘れる
row
row[0]
getValues()は二次元配列です。 ここを理解するとバグが激減します。
GAS グルーピング実務ベストプラクティス
おすすめ構成はこちら。
getValues()
↓
reduce()
↓
setValues()
シート操作を最小化する。 これがGAS高速化の基本です。
まとめ|Google Apps Scriptのグルーピングを使いこなそう
グルーピングの本質はシンプルです。
- 同じ属性でまとめる
- 分析しやすくする
- 集計しやすくする
- レポート化しやすくする
GAS上級者がよく使う組み合わせがあります。
sort + group + reduce
これが使いこなせると、データ処理の世界が一気に広がります。
旅行先で大量の写真を整理すると、思い出が見えやすくなるように。 データも整理すると、初めて「意味」が見えてきます。
GASで一段上へ進みたいなら、まずはグルーピングを自分の武器にしていきましょう。







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