GoogleAppsScriptでスプレッドシートのセルをソートする方法(sortメソッド)
Google Apps Script(GAS)にはスプレッドシートのセルをソートするメソッドがあり、データの整理を行うことが可能です。
今回、GASを使ってスプレッドシートのソートを行う方法を解説します。
スプレッドシートでソートは頻繁に利用
スプレッドシートで色々なデータ入力やデータ処理を行っていると、もはやソートは必須機能です。
ソートというのは並び替えことで、ルールに沿ってデータを並び替えることです。
スプレッドシートではA-Z順(昇順)、Z-A順(降順)の2種類のソートが利用できます。
例えば、価格表などの場合、値段の安いものから高い順にソートして並び替えたりします。
並び替えることで、データ自体を見やすくする効果やデータの構造理解が進みます。
このように表計算ソフトでは、ソートを行う頻度はとても高いです。
GASでもスプレッドシートのソートが可能
そんな頻度の高いスプレッドシートのソートは、Google Apps Script(GAS)でも実行することができます。
通常のGASコードにソート処理を組み込むと、forループなどの繰り返し処理が必要になります。
しかし、スプレッドシート用に用意されているソート用メソッドを使えば、一発でソートが実行できます。
そのため、GASではスクリプトで処理したデータをスプレッドシートに書き込んだ後、スプレッドシート上でソートして並び替えるといった処理をよく行います。
GASでソートするためのsortメソッド
Google Apps Scriptでスプレッドシートのソートを行うために、sortメソッドを使用します。
Range.sort(sortSpecObj)
スプレッドシートのRangeクラスのオブジェクトでsortメソッドが利用できます。
引数としては、ソートの条件を表すオブジェクトを指定します。
例えば、B列(2列目)の値を元に昇順でソートする場合は以下のように記述します。
Range.sort({column: 2, ascending: true})
1つ目のcolumnにソート条件の列(A列なら1、B列なら2)を指定し、2つ目のascendingで昇順(true)か降順(false)を指定します。
GASでスプレッドシートを読み込んだ後、getRangeなどでセル範囲を取得後にsortメソッドが実行できます。
スプレッドシートをソートするGASのサンプルコード
実際にスプレッドシートのサンプル表でGoogle Apps Scriptによるソートを行うサンプルコードを解説します。
あらかじめ用意してスプレッドシートの表を、GASでE列の金額をキーにして降順で並び替えてみます。
function sortSpreadsheet(){
//スクリプトが紐づくスプレッドシートのアクティブなシートを読み込む
let mySheet = SpreadsheetApp.getActiveSheet();
//シート内でソートしたいセル範囲をgetRangeで指定する
let data = mySheet.getRange(2, 1, 9, 7);
//列Eを基準に降順でソートする
data.sort({column: 5, ascending: false});
}
サンプルコードを実行すると、スプレッドシートの表の順番が変わり、金額の大きい順に並び変わりました。
ascendingを「true」にすると、金額が小さい順(昇順)にソートすることも可能です。
sortメソッド使用時はセル範囲に注意
なお、GASのsortメソッドを利用する際には、利用元のRangeオブジェクトのセル範囲に注意が必要です。
sortメソッドで引数に指定するcolumnの数値が、セル範囲に含まれていない場合はエラーするからです。
「Exception: 範囲外のセル参照です」というエラーメッセージが表示され、実行できません。
また、sortメソッドでは、Rangeオブジェクトの指定したセル範囲しかソート対象となりません。
そのため、想定通りソートできない場合は、getRangeメソッドでのセル範囲が正しく設定されているか確認しましょう。
まとめ・終わりに
今回、Google Apps Script(GAS)でスプレッドシートのシートに格納されたデータをソートする方法を紹介しました。
セル範囲を表すRangeオブジェクトでsortメソッドを使うことで、スプレッドシートのソートができます。
sortメソッドを使うことで、GASのコードで昇順・降順といったデータを並べ替える処理を実装する必要がありません。
sortメソッドを活用し、GASで見やすいスプレッドシートに整形しましょう。
ディスカッション
コメント一覧
まだ、コメントがありません