2015年12月17日木曜日

Google Apps Script スプレッドシートのリストを上詰めにするスクリプト

スプレッドシートで、1行置きのリストや、複数行に値が重複しているような場合、不要なものを削除して並べ替えるのがかなり手間なので、スクリプトを書きました。


このようなリストを、



↓ こうする




簡単なコードですが、使い方によっては、かなり使えるので、適宜、数値を変更して利用してみてください。

function topAlignment() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  //  シートの番号は、適宜変更して下さい。
  var sheet = ss.getSheets()[2];

//  sheet内の最終行の数を取得
  var last = sheet.getLastRow();


//  選択範囲の値を全て取得
  var values = sheet.getRange(1, 1, last, 1).getValues();

//  各変数の初期化
  var val, i, n = 1;

//  getValuesはArrayなので、Arrayでforループをまわす
  for (i = 0; i < last; i++) {
    val = values[i];
 
//    Arrayの偶数番は、元の値が入っていたcellを空白にしてから、任意のセルに値をセット
    if (i%2 == 0) {
      sheet.getRange(i + 1, 1).setValue("");
      sheet.getRange(n, 1).setValue(val);
      n++;
    }
 
//    Arrayの奇数番は不要なので、そのまま元の値が入っていたセルを空白にする
    if (i%2 == 1) {
      sheet.getRange(i + 1, 1).setValue("");
    }
  }
}


最近は、for ループでgetValue() をリクエストし過ぎると警告が出るようなので、getValues(); で、Rangeの値をすべて取得して配列で処理した方がいいようです。

普通にその方がスマートですね・・・。


H.T.H.

0 件のコメント:

コメントを投稿