A列に a1 a2 a3 というデータが入ったシートから
[a1, a2, a3]
という1次元配列を作りたい
コード.gsfunction 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次元配列で取得したい列を指定してその最終行を取得してやる
コード.gsfunction 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次元配列で取得したくて上記のようなコードを書いてみました
コード.gsfunction 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); } |
関連記事
データが入力されている最終行を取得する