【GAS】getLastRowでスプレッドシートの最終行を取得する

GASgetLastRow,setValues,スプレッドシート

この記事では、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メソッドその範囲外のデータが入っている行数を取得する
この記事を書いた人

てつお
広告代理店出身、事業会社でWebマーケティングや開発の仕事をしている26歳です。プロフィール詳細はこちら
■Google広告認定資格|Google アナリティクス個人認定資格(GAIQ)|TOEIC920点