【GAS】getLastRowでスプレッドシートの最終行を取得する
この記事では、Google Apps Script(GAS)のgetLastRowメソッドの使い方を解説します。getLastRowメソッドを使うことでスプレッドシートの最終行の取得が容易になります。
スプレッドシートの最終行とは
GASを使ってスプレッドシートに処理を実行する際など、シート内に書き込まれているでデータの最終行数を取得したいシーンが多くあります。今回の記事では、このシートから最終行数を取得し、その値を活用してGAS処理を実行することがゴールです。
getLastRowメソッドとは
Sheet.getLastRow()
- Sheet(sheet):シートクラスのオブジェクト
- response(integer):Sheetに格納されているデータの最終行数
getLastRowメソッドとは、指定したシート内でデータが入っているセルの最終行の行番号を返すメソッドです。スプレッドシートのデータを格納した配列に対して行数分の繰り返し処理を行ったり、最終行を起点に書き込む位置を指定したりなど、使いどころが多く非常に便利なメソッドです。
let ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブスプレッドシートを取得
let sheet = ss.getSheets()[0]; // アクティブシートを取得
ley lastrow = sheet.getLastRow(); // 最終行を取得
console.log(lastrow); // 13
getLastRowメソッドの注意点
Google Apps Script(GAS)でスプレッドシートの最終行を取得できるgetLastRowメソッドには注意すべきポイントがいくつかあります。下記のポイントには気を付けて使ってください。
Rangeに対して実行した場合
getLastRowはSheetではなくRangeにも実行可能ですが、Rangeに実行した場合は単純にRangeで指定したデータの行数が返ってきます。
let ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブスプレッドシートを取得
let sheet = ss.getSheets()[0]; // アクティブシートを取得
let range = sheet.getRange(1, 1, 11, 6)
let lastrow = range.getLastRow(); // 最終行を取得
console.log(lastrow); // 11 ※ほしいのは9行目
getRangeで取得してから getLastRowメソッドを使う場合、 空白が含まれていたとしてもgetRangeの行数となってしまうので気を付けたほうがよさそうです。
シート内に誤入力データが存在した場合
誤って入力されたデータでも最終行として認識されます。これはスペース等の目視で確認できない場合も同様なので気を付けたいです。
let ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブスプレッドシートを取得
let sheet = ss.getSheets()[0]; // アクティブシートを取得
let lastrow = sheet.getLastRow(); // 最終行を取得
console.log(lastrow); // 17 ※本来取得したいのは13行目まで
getLastRowメソッドの活用方法
指定したシートに対して、自動で現在格納されているデータの最終行を取得してくれるので、最初の行から最終行まですべての値を取得したり、各行に対して反復処理を実行したい際などに便利です。
シートの最終行のデータを取得する
下記のような店舗売上のシートから最終行に入っているデータ(D店舗のデータ)を取得してみます。
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
// 最終行列を取得
let lastrow = sheet.getLastRow();
let lastcol = sheet.getLastColumn();
//最終行列を指定
let values = sheet.getRange(lastrow,1,1,lastcol).getValues();
console.log(...values);
[ 'D’, 110193, 16, ' ']
シート内のすべてのデータを取得する
最終行がわかるので、最初の行から最終行までを指定することでシートからすべてのデータを取得できます。
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
// 最終行を取得
let lastrow = sheet.getLastRow();
// 最終行を取得
let lastcol = sheet.getLastColumn();
//すべての行列を指定
let values = sheet.getRange(1,1,lastrow,lastcol).getValues();
console.log(values);
[ [ '店舗名’, '売上’, '来店客数’, '客単価’ ],
[ 'A’, 265372, 33, " ],
[ 'B’, 265427, 33, " ],
[ 'C’, 331522, 21, " ],
[ 'D’, 110193, 16, " ] ]
行ごとの二次元配列としてすべてのデータを取得できました。
すべての行に対して反復処理を実行する
最終行まで反復処理して値を挿入することで、D列に核店舗の客単価を計算してみます。
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
// 最終行を取得
let lastrow = sheet.getLastRow();
//最終行までの各行に反復処理を実行
//列名(1行目)は処理しなくて良いので開始位置は2行目
for(let i=2; i<=lastrow;i++){
sheet.getRange(i,4).setValue('=B'+i+'/C'+i);
}
うまく計算できてますね。
最終行にデータを書き込む
最終行がわかれば最終行を指定してデータを書き込むことも容易です。下記のコードでは、1店舗のデータを最終行に追加しています。
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
// 最終行列を取得
let lastrow = sheet.getLastRow();
let lastcol = sheet.getLastColumn();
//最終行に書き込みたい店舗データ
let shopE = ['E', 120394, 12, 10033];
//行列を指定して書き込み実行
sheet.getRange(lastrow+1,1,1,lastcol).setValues([shopE]);
まとめ
Google Apps Script(GAS)のgetLastRowメソッドについて解説を行いました。
- getLastRowメソッドはスプレッドシートのデータが格納されている最終行を取得するメソッド
- 最終行を取得することで配列に格納したデータを逐次処理などに活用できる
- getRangeでデータ範囲の指定があった場合、getLastRowメソッドはその指定行数を取得する
- 本来取得したい範囲の外に誤入力されたデータがあった場合、getLastRowメソッドその範囲外のデータが入っている行数を取得する