最終行に自動的に追加していくようなプログラムを書きたいがわからない
getLastRowを使うのはわかるが、他の列のデータが邪魔してうまく動かない
そんな疑問にお答えします。
本記事の内容
・データがある最終行を取得する方法
・特定の列での最終行を取得する方法
データがある最終行を取得する方法
サンプルとして次のようなデータを用意しました。
5の次にデータを追加するやり方を解説していきます。
まずは、データがある最終行を取得するためにgetLastRowを使用します。
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var lastRow = sheet.getLastRow(); Logger.log(lastRow); } >log 5.0
この関数を使用することによってデータがある最終行番号を取得することができます。
後はgetRangeを使って追加したい行、列番号を指定して、値をセットしてあげれば追加することができます。
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var lastRow = sheet.getLastRow(); sheet.getRange(lastRow + 1, 1).setValue(6); }
最終行に1追加してあげた行番号を指定して追加しました。
基本的にはこれでうまく使うことができるかと思います。
ただ、業務によっては追加したい場所以外にもデータが入っている場合があると思います。
そんな時にはそちらのデータの行番号が取得されてしまいます。
次のような状態です。
この場合には、最終行がaと入力されている場所となり10行目となってしまいます。
そんな場合のやり方を次に解説いたします。
特定の列を指定した最終行の取得方法
特定の列のみでもgetLastRowを使えたら簡単なのですが、GASの場合うまくとることができないので、
別のやり方でとるようにします。
今回はA列での最終行を取得するようにします。
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var rangeData = sheet.getRange('A:A').getValues(); var lastRow = 0; for(var i=0; i<rangeData.length; i++){ if(rangeData[i][0]){ lastRow = i + 1; } } Logger.log(lastRow); } >log 5
ちょっとだけコードが長くなりましたが、やっていることはシンプルです。
まずは、対象の列データをすべて取得します。
sheet.getRange(‘A:A’).getValues()
の部分です。
getRange(‘A:A’)で最終行を取得したい列を指定してあげます。
そして、getValuesで各セルのデータをすべてとってきます。(空白のデータも)
ここで注意してほしいのは、getValueではなくgetValuesという複数形です。
後はfor文を使ってデータがあれば最終行のデータを更新していくような形となっています。