GASで実践!複数条件から2次元配列や日付を自動ソートする方法
GASで複数条件から配列を自動でソートする方法って、どうやるんだろ?難しそうで手をつけられなくて…

猫男

catman
安心するんだ、実はそんなに難しくない。catmanがGASでのソート方法をレクチャーするよ!
GASで配列をソートする基本
最近、ソートしたいテーブルがあると相談を受けたcatmanは、猫男に基本的なGASでの配列ソートを教えることにしました。
配列を単純にソートする
単純な数値や文字列の配列なら、Array.prototype.sort()を使えばいい。
function sortSimpleArray() {
let array = [3, 1, 4, 1, 5, 9];
array.sort(); // 配列を昇順にソート
Logger.log(array); // [1, 1, 3, 4, 5, 9]
}
✅ 配列を比較して、数値や文字列に応じて整列できるよ。
なるほど、単純な配列は.sort()でOKですね!

猫男
GASで複数条件を使って2次元配列をソート
しかし、猫男は2次元配列に複数の基準でソートをしたいという新たな課題に直面しました。例えば、「価格」と「日付」でソートしたい場合はどうすれば良いのでしょうか?
2次元配列を複数条件でソートする
ここでの秘訣は、カスタマイズした比較関数だ。
function sort2DArray() {
let data = [
['商品A', 300, '2023-03-01'],
['商品B', 200, '2023-02-01'],
['商品C', 200, '2023-01-01']
];
data.sort(function(a, b) {
if (a[1] === b[1]) {
return new Date(a[2]) - new Date(b[2]); // 日付でソート
}
return a[1] - b[1]; // 価格でソート
});
Logger.log(data);
}
✅ 複数条件でソートするときには、配列要素を比較するための独自の関数を書けばいいのさ。
この方法で価格も日付も考慮してソートできるんだ!勉強になったな〜。

猫男
GAS上でスプレッドシートのデータをソート
次に、猫男はスプレッドシートのデータをGASを使って自動ソートする方法を知りたいと思いました。では、スプレッドシートを使ってデータのソートをやってみましょう。
スプレッドシートのデータをソートする手順
スプレッドシート内のデータをGASでソートするには、まずデータを取得し、整列後に書き戻す手順を行います。
function sortSheetData() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getDataRange();
const values = range.getValues();
values.sort(function(a, b) {
if (a[1] === b[1]) {
return new Date(a[2]) - new Date(b[2]);
}
return a[1] - b[1];
});
range.setValues(values);
}
✅ まずスプレッドシートからデータを取得→整列→元のシートに書き戻す手順だ。SpreadsheetAppを使えばスプレッドシート操作も簡単だよ。
GASを使えばスプレッドシートのデータ管理も楽々ですね!

猫男
GASで日付を自動ソートする
日時データの場合も複雑と思われがちですが、GASでは簡単に処理できます。ここは特に強調すべきポイントです。
日付データを扱う際の注意点
日付データはDateオブジェクトを使用して比較できます。
function sortDates() {
let dates = ['2023-03-01', '2022-12-31', '2023-01-15'];
dates.sort(function(a, b) {
return new Date(a) - new Date(b); // 日付を昇順にソート
});
Logger.log(dates); // ['2022-12-31', '2023-01-15', '2023-03-01']
}
✅ 文字列の配列も日付フォーマットにして比較することで、簡単にソートできる。new Date()を使おう。
練習問題
次に練習問題です。以下の2次元配列を「種類」で昇順、その後「価格」で降順にソートしてください。
let items = [
['A', 300],
['B', 500],
['A', 200],
['B', 200],
['A', 100]
];
解答・解説
function sortItems() {
let items = [
['A', 300],
['B', 500],
['A', 200],
['B', 200],
['A', 100]
];
items.sort(function(a, b) {
if (a[0] === b[0]) {
return b[1] - a[1]; // 価格で降順
}
return a[0] > b[0] ? 1 : -1; // 種類で昇順
});
Logger.log(items);
}
説明: sort()を使い、最初に種類で昇順に、次に価格で降順になるように比較関数を設定しました。それにより、データを適切に並べ替えています。