LANG SELRCT

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

2016年6月20日月曜日

選択した列のデータを配列にして取得する


A列に a1 a2 a3 というデータが入ったシートから



[a1, a2, a3]

という1次元配列を作りたい




コード.gs
function get_array() {
  var sh = SpreadsheetApp.getActiveSheet();
  var last_row = sh.getLastRow();
  var range = sh.getRange("A1:A" + last_row)
  var values = range.getValues();
  var array = [];
  for(var i = 0; i < values.length; i++){
    array.push(values[i][0]);
  }
  Logger.log(array);
}
意訳
この機能がやること
対象のシートを取得して
シート内でデータが入っている最終行を取得して
A1から最終行までの範囲を指定して
範囲内のすべての値を取得して
配列の入れ物を用意して
値の数だけ以下を繰り返す
値を1つずつ取り出してarrayに追加する

最終的にできたarrayをログに出す





get_array() を実行すると以下のように1次元配列でログが出ます






列ごとにデータが入っている行数が異なる場合
1次元配列で取得したい列を指定してその最終行を取得してやる


コード.gs
function get_array() {
  var sh = SpreadsheetApp.getActiveSheet();
  var col = "A";
  var last_row = get_last_row(sh, col);
  var start_row = 1;
  var range = sh.getRange(col + start_row + ":" + col + last_row)
  var values = range.getValues();
  var array = [];
  for(var i = 0; i < values.length; i++){
    array.push(values[i][0]);
  }
  Logger.log(array);
}

function get_last_row(sh, col) {
  var values = sh.getRange(col + ":" + col).getValues();
  for (var i = values.length - 1; i >= 0; i--) {
    if (values[i] != "") {
      break;
    }
  }
  var last_row = i + 1;
  return last_row;
}
意訳
この機能がやること
対象のシートを取得して
列を指定して
その列でデータが入っている最終行を取得して
先頭の行を指定して
範囲を指定して
範囲内のすべての値を取得して
配列の入れ物を用意して
値の数だけ以下を繰り返す
値を1つずつ取り出してarrayに追加する

最終的にできたarrayをログに出す


この機能がやること
受け取ったshシート内のcol列の値(空欄を含む)をすべて取得して
値がなくなるまで以下を繰り返す
もし値が空でなければ
繰り返しの処理から抜ける


iは0から始まっているので i に1を足したものを行数として
返す




補足


以下のように普通に range.getValues() で取得すると
2次元配列が返ってくるのですが
1次元配列で取得したくて上記のようなコードを書いてみました


コード.gs
function get_array() {
  var sh = SpreadsheetApp.getActiveSheet()
  var last_row = sh.getLastRow();
  var range = sh.getRange("A1:A" + last_row)
  var values = range.getValues();
  Logger.log(values);
}





関連記事

データが入力されている最終行を取得する