GAS sort完全ガイド|Google Apps Scriptのソート処理・配列並び替え・スプレッドシート実務活用を徹底解説
GAS(Google Apps Script)を書いていると、必ずと言っていいほど登場するのが「ソート(並び替え)」です。
売上ランキングを作る。最新データ順に並べる。名前順に整理する。分析前にデータを整形する。 実務では「並び替え」ができるだけで、データ処理の効率が一気に変わります。
旅先で写真を撮ったあと、スマホのアルバムを日付順に整理すると見返しやすくなるように、プログラムもデータを整理してから扱うのが基本です。
この記事では、GASのsort処理を初心者向けに整理しつつ、実務レベルの使い方まで旅行好きの友達に話す感覚で解説していきます。
GASのsort(ソート)とは?Google Apps Scriptの並び替え処理の基本
ソートとは、簡単に言うと配列の順番を並び替える処理です。
基本例
[3,1,2]
↓
[1,2,3]
たったこれだけですが、実務では非常に重要です。
- 売上ランキング作成
- 日付の新しい順表示
- 顧客データ整理
- 分析前の前処理
- スプレッドシート整形
GASが強い人ほど、sortを自然に使っています。
GAS sortの基本構文(Google Apps Script配列ソート)
最重要なのが比較関数です。
array.sort(function(a,b){
return a - b;
});
動きはシンプルです。
- a - b がマイナス → aを前に
- a - b がプラス → bを前に
つまり本質はこれです。
比較関数で順序を決める
GAS sortで数値を並び替える(昇順・降順)
昇順(小さい→大きい)
let list = [30,10,20];
list.sort((a,b)=>a-b);
console.log(list);
// [10,20,30]
降順(大きい→小さい)
list.sort((a,b)=>b-a);
ランキング表示なら降順が定番です。
例えば売上管理なら、
- 1位:120万円
- 2位:95万円
- 3位:70万円
という形で大きい順に並べます。
GAS sortで文字列を並び替える方法
単純な文字列ソート
let list = ["banana","apple","orange"];
list.sort();
ただし、日本語や多言語を扱う場合は注意です。
日本語対応(実務では重要)
list.sort((a,b)=>a.localeCompare(b));
localeCompare()を使うと、日本語や文字コードの違いによる並び崩れを防げます。
実務ならこちらを基本にしておくのがおすすめです。
GAS 2次元配列のソート(スプレッドシート実務で最重要)
GASの実務で一番よく使うのがここです。
スプレッドシートから取得したデータは基本的に2次元配列になります。
let data = [
["鈴木",30],
["田中",25],
["佐藤",35]
];
年齢順で並び替え
data.sort((a,b)=>a[1]-b[1]);
配列構造はこう考えます。
- a[0] → 名前
- a[1] → 年齢
名前順に並び替え
data.sort((a,b)=>a[0].localeCompare(b[0]) );
顧客管理や営業データ整理でかなり登場します。
GASとスプレッドシートを連携してソートする方法
現場でおすすめなのは「配列で処理して最後に書き戻す」やり方です。
実務向けパターン(推奨)
function sortData(){
const sheet =
SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet();
const data =
sheet.getDataRange()
.getValues();
const body=data.slice(1);
body.sort(
(a,b)=>a[1]-b[1]
);
const result=[
data[0],
...body
];
sheet.getRange(
1,
1,
result.length,
result[0].length
).setValues(result);
}
GAS(JavaScript)における ...body は、「body という配列の中身を、バラバラに展開して並べる」という意味の構文です。
ポイントはヘッダ行を除外することです。
- slice(1)でデータ部分だけ取得
- 配列で高速処理
- 最後にsetValues()
これが実務で一番安定します。
GAS 複数条件ソート(ORDER BYの考え方)
実務では「年齢だけ」では終わりません。
例えば、
- 年齢順
- 同じ年齢なら名前順
こんなケースが普通にあります。
data.sort((a,b)=>{
if(a[1]!==b[1]){
return a[1]-b[1];
}
return a[0]
.localeCompare(b[0]);
});
SQL経験者ならイメージしやすいです。
ORDER BY 年齢, 名前
nullや空データを安全にソートする方法
現場のデータはきれいではありません。
空欄やnullが混ざるのは日常です。
data.sort((a,b)=>{
if(!a[1]) return 1;
if(!b[1]) return -1;
return a[1]-b[1];
});
これで空データを後ろへ送れます。
地味ですが、運用ではかなり大事です。
GAS sort実務パターン3選
売上ランキング
data.sort( (a,b)=>b[1]-a[1] );
最新日付順
data.sort( (a,b)=> new Date(b[0]) - new Date(a[0]) );
文字+数値の複合ソート
data.sort((a,b)=>{
if(a[0]!==b[0]){
return a[0]
  .localeCompare(b[0]);
}
return b[1]-a[1];
});
GAS sortとreduceを組み合わせる実務テクニック
GASを本格的に使う人ほど、この組み合わせを多用します。
まずソート。 そのあと集計。
let sorted =
data.sort(
(a,b)=>
a[0].localeCompare(b[0])
);
let grouped=
sorted.reduce(
(acc,row)=>{
if(!acc[row[0]]){
acc[row[0]]=[];
}
acc[row[0]].push(row);
return acc;
},{});
分析系の処理では定番です。
実務フローはこうなります。
取得
↓
sort
↓
filter
↓
reduce
↓
出力
この流れが作れるようになると、GASでできることが一気に広がります。
GAS sortでよくあるミス
数値を文字列として並び替える
[10,2,30]
そのままsort()すると意図しない順序になることがあります。
必ず比較関数を書きましょう。
(a,b)=>a-b
ヘッダまで並び替える
slice(1)で除外しましょう。
日付を文字列のまま比較する
Date変換を忘れないこと。
まとめ|GAS sortを使いこなすとデータ処理が速くなる
最後に重要ポイントを整理します。
- sortは並び替えの基本
- 比較関数が本質
- GAS実務は2次元配列が中心
- 配列で処理→setValuesが高速
- reduceと組み合わせると分析処理が強くなる
GASが得意な人ほど、
sort + filter + reduce
を自然につなげています。
データを「扱いやすい形」に整える。 それがsortの役目です。
最初は小さな配列からでも十分です。 並び替えを自在に扱えるようになると、Google Apps Scriptの実務レベルが一段上がります。







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