テータ(値)が入力されている最終行を取得したい時にぶつかった壁があり
それを乗り越えた時に書いたコードです
以下の3つのパターンについて書きます
- シート内で値が入力されている最終行を取得する
- 特定の範囲で値が入力されている最終行を取得する
- 特定の列で値が入力されている最終行を取得する
例として以下のようなシートを使います
1. シート内で値が入力されている最終行を取得する
これが1番簡単で
シートを指定して.getLastRow()で取得できます
コード.gs
function get_last_row(){ var last_row = SpreadsheetApp.getActiveSheet.getLastRow(); Logger.log(last_row); } |
意訳.gsこの処理は以下を実行する 今開いているシートの値が入っている最終行を取得して ログに出す |
ログを見ると6(行目)が返ってきています
これはA列で値が入っている最終行の6行目を返しています
2. 特定の範囲で値が入力されている最終行を取得する
次にB列とC列の範囲内で
データが入力されている最終行を取得するコードの例です
コード.gsfunction get_last_row() { var sh = SpreadsheetApp.getActiveSheet(); var values = sh.getRange("B:C").getValues(); for1: for (var i = values.length - 1; i >= 0; i--) { for(var j = 0; j < values[i].length; j++){ if(values[i][j] != ""){ break for1; } } } var row = i + 1; Logger.log(row); } | 意訳.gsこの処理は以下を実行する 今開いているシートの B列からC列の範囲にある値をすべて取得して 1つ目のfor文にfor1というラベルを付けて 1つ目のfor文で一番下の行から上に向かって以下を繰り返す 2つ目のfor文で対象行内の列の数だけ(つまりセルの数)以下を繰り返す セルの値が空でなければ 1つ目のfor文から抜ける iは0から始まっているので i に1を足したものを行数として ログに出す |
ログを見ると4(行目)が返ってきています
これはB列で値が入っている最終行の4行目を返しています
3. 特定の列で値が入力されている最終行を取得する
最後はC列で
データが入力されている最終行を取得するコードの例です
コード.gsfunction get_last_row() { var sh = SpreadsheetApp.getActiveSheet(); var values = sh.getRange("C:C").getValues(); for (var i = values.length - 1; i >= 0; i--) { if (values[i] != "") { break; } } var last_row = i + 1; Logger.log(last_row); } | 意訳.gsこの処理は以下を実行する 今開いているシートの C列の値をすべて取得して 一番下の行から上に向かって以下を繰り返す セルの値が空でなければ for文から抜ける iは0から始まっているので i に1を足したものを行数として ログに出す |
ログを見ると3(行目)が返ってきています
これはC列で値が入っている最終行の3行目を返しています
補足
上記をアレンジして、対象の列を列番号(Aは1, Bは2, Cは3...)で指定して、最終行の次の行を取得したい場合
コード.gsfunction get_next_row(){ var sh = SpreadsheetApp.getActiveSheet(); var col = 3; var next_row = get_last_row(sh, col) + 1; Logger.log(next_row); } function get_last_row(sh, col) { var start_row = 1; var num_cols = 1; var sh_last_row = sh.getLastRow(); var values = sh.getRange(start_row, col, sh_last_row, num_cols).getValues(); for (var i = values.length - 1; i >= 0; i--) { if (values[i] != "") { break; } } var last_row = i + 1; return last_row; } | 意訳.gsこの機能がやること 対象のシートを取得する 対象の列を番号で指定する その列に入力されている最終行を取得して1足して ログに出す この機能がやること 開始行をしていして 対象の列数をしていして シート内でデータが入力されている最終行を取得して 範囲内の値を取得して 値の数だけシートの下から順番に以下を繰り返す(配列のindexを表すiは0始まりなので、最終行の数から1引いた数が配列内の最後のindex番号) 値が空じゃなかったら for分から抜ける iは配列内の要素のindex番号で、0始まりなので、実際の行数は+1して 返す |
関連記事
データが入力されている最終行の次の行へカーソルを移動する
参考
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getLastRow()