🐼

【GAS】スプレッドシートのセル範囲を並べ替える方法(sortメソッド)/昇順・降順・複数列の優先順

2024/06/22に公開

GAS(Google Apps Script)でスプレッドシートのセル範囲を指定して並べ替える方法を紹介します。各列毎に昇順・降順の指定や複数条件(列の優先順)での並び替えも可能です。

sort(sortSpecObj) Class Range  |  Apps Script  |  Google for Developers
指定した範囲内のセルを、指定した列および順序で並べ替えます。

手操作で並び替えをする

GASを使わなくても、並び替えは手操作でも可能です。セル範囲を選択して、メニューバーの[データ]→[シートを並び替え] or [範囲を並び替え]の順に操作して簡単に並び替えができます。

GASのsortメソッドで並び替えをする

セル範囲(range)を指定して並び替えができます。{ column: 2, ascending: false }の形式のオブジェクトで並び替え条件を指定できます。columnは列番号(A列→1、C列→3)で、ascendingがtrueで昇順、falseで降順になります。オブジェクトを配列にして複数列の条件・優先順で並び替えもできます。

function sort1() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheets()[0];
  console.log(`シート名: ${sheet.getName()}`);
  const range = sheet.getRange("A2:D6");
  console.log(`並び替えをする対象のセル範囲: ${range.getA1Notation()}`);

  // A列を昇順に並び替える
  range.sort(1);
  // B列を昇順に並び替える
  range.sort(2);
  // B列を降順に並び替える
  range.sort({ column: 2, ascending: false });
  // B列を降順、A列を昇順の優先順で並び替える
  range.sort([{ column: 2, ascending: false }, { column: 1, ascending: true }]);
  // B列を降順、A列を昇順の優先順で並び替える
  range.sort([{ column: 2, ascending: false }, 1]);
  // B列、A列を昇順の優先順で並び替える
  range.sort([2, 1]);
  // B列、A列を昇順の優先順で並び替える
  range.sort([{ column: 2, ascending: true }, { column: 1, ascending: true }]);
}

【エラー】Exception: Cell reference out of range

セル範囲外のcolumn(列番号)を指定するとエラーになる。相対的な位置番号ではないので注意する。A列は1、B列は2で固定である。

function sort2() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("シート1");
  const numRows = sheet.getLastRow() - 1;
  const numColumns = sheet.getLastColumn() - 1;

  const range = sheet.getRange(2, 2, numRows, numColumns);
  console.log(`並び替えをする対象のセル範囲: ${range.getA1Notation()}`);

  //【誤】セル範囲をB列から指定しているので、columnをA列の1を指定すると範囲外のエラーに至る。
  range.sort({ column: 1, ascending: false });

  //【正】columnをB列の2を指定して、降順で並び替える
  range.sort({ column: 2, ascending: false });
}

Discussion