GAS グルーピング完全ガイド|Google Apps Scriptで集計・reduce・GROUP BY処理を実務レベルで解説

2026年5月24日日曜日

GAS JavaScript プログラミング

t f B! P L

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で一段上へ進みたいなら、まずはグルーピングを自分の武器にしていきましょう。

このブログを検索

Blog Archive

Welcome



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

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

人気の投稿

QooQ