LANG SELRCT

コードを書く場所についてはこちら

2016年6月22日水曜日

シートのデータを昇順・降順でソートする

シートのデータを昇順・降順で並べ替えたい時は、フィルタ機能の「A→Zで並べ替え」「Z→Aで並べ替え」で実行できますが、それをコードから実行するということをやってみました。

事前準備

A列からC列に任意のデータを入力しておきます。
例として下記のようなデータを入力してみます。


ポイント
1. ソートしたい範囲を指定します。
var range = sh.getRange("A2:C");

2. 基準にする列を2(B列)に指定して、昇順に設定(ascending: true)します。
range.sort([{column: 2, ascending: true}]);


コード.gs
function sort(){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = ss.getActiveSheet();
    var range = sh.getRange("A2:C");
    range.sort([{column: 2, ascending: true}]);
}


コードを実行するまでの手順

1. コード.gsにコードを書いて保存します。

2. sortを実行します。

3. 許可を確認をクリックします。

4. 許可をクリックします。



B列を基準に、A列からC列のデータが昇順に並び変えられました。


おまけ



ソートする範囲を "A2:C" のような決め打ちではなく
シート内でデータが入っている範囲を自動で指定したくて
以下のようなコードを追加で書きました


このコードでは行が増えても列が増えても
A2から最終行、最終列を対象範囲にしてソートが行われます


"A2:C" の方が見た目で範囲がわかりやすいですが
こんな方法でもソートできます


コード.gs
function sort() {
  var target_col = 1;
  var asc = true;
  var start_row = 2;
  var start_col = 1;
  
  var sh = SpreadsheetApp.getActiveSheet();
  var last_col = sh.getLastColumn();
  var last_row = sh.getLastRow();
  var num_rows = last_row - (start_row - 1);
  var num_cols = last_col - (start_col - 1);
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  range.sort([{
    column: target_col,
    ascending: asc
  }]);
}
意訳
この処理は以下を実行する
ソートする基準の列を指定して
昇順にしたければtrue, 降順にしたければfalseにして
ソートしたい範囲の先頭行を指定し(例では2行目)
ソートしたい範囲の先頭列を指定し(例では1列目(A列))

対象のシートを指定して(例では今開いているシート)
データが入っている最終列を取得し
データが入っている最終行を取得し
対象の行の数を取得し
対象の列の数を取得し
2行目の、1列目から、対象の行数、対象の列数を範囲に指定して
ソートする
基準にする列はtarget_colで指定した列
昇順はascで指定したとおり