A列に a1 a2 a3 というデータが入ったシートから
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVHbq7f7AE9PntnoaGLulCxjtFn45dZuWliD2tzako4FYJFh9UEcwrspzB6t2AjJ3s79WX4e0rj-ytF0VXRSmCMGKt7prt5bd7YJ3x0Iro2M8TipBvydVF-MG_Ooq924iK0M8qrODKD84/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2018-01-20+13.21.36.png)
[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次元配列でログが出ます
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEXrdI6TJMC53WZvRMjc_jFF6UAO_TFGW1W93mHYK0SaHWyMhQj4vgM7-ouv3XWQ-6lJ9uGhDDa2joEg-M2CLIMu6ZNIXUPiL6OK40IFi8aAFZzf0_F0YoSn82Ny-zuhuO1j_tHBFWaDI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2018-01-20+13.26.19.png)
列ごとにデータが入っている行数が異なる場合
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); } |
関連記事
データが入力されている最終行を取得する