Google Apps Script(GAS)でスプレッドシートの最終列を取得する(getLastColumn)

2020年12月31日

Googleスプレッドシートで値が入っているシートの最終列を、Google Apps Script(GAS)で取得する方法を解説します。

シート内にある全てのデータを処理する場合に、GASのgetLastColumnメソッドが便利です。

GASでスプレッドシートの最終列を取得・処理

Google Apps Script(GAS) でスプレッドシートの処理を行う場合、シート内のデータを全て取得したいケースが発生します。

シート内の全てのデータを取得した上で集計を行う処理や、全データに対して行う処理などです。

スプレッドシートでは行方向にデータを追加していく形が一般的ですが、列に追加する形式の表もあります。

通常は行にデータを追加するケースが多いが、一部列にデータを追加するタイプも

時系列データなどで項目の要素名が長い場合は、行方向に追加するよりも列方向にデータを追加していくほうが見やすい表になります。

こうした場合に、GASでデータ処理を行うために、スプレッドシートの最終列を取得する必要があります。

GASの最終列取得はgetLastColumnメソッド

スプレッドシートの最終列を取得するGoogle Apps Script(GAS)の方法として、getLastColumnメソッドが用意されています。

sheet.getLastColumn()

getLastColumnはsheetオブジェクト(またはRangeオブジェクト)で利用可能なメソッドで、引数なしで実行する形式です。

このメソッドを使うとシート内のセルを調べ、データが入っているセルの最終列を教えてくれます。

このgetLastColumnメソッドを使えば、データ開始列から最終列までの全てのデータを取得することが可能です。

その後、forループを回すことで、各列データの逐次処理を行うことができます。

getLastColumnで最終列を取得するGASサンプルコード

実際にGoogle Apps Script(GAS)で、スプレッドシートのシートの最終列を取得するサンプルコードを紹介したいと思います。

Google Apps Script(GAS)でgetLastColumnメソッドを使って、スプレッドシートの最終列を取得するサンプルコード
function myFunction() {
  //スクリプトに紐付いたスプレッドシートのアクティブなシートを読み込む
  let mySheet = SpreadsheetApp.getActiveSheet();
  //読み込んだシートの最終列を取得する
  let lastColumn = mySheet.getLastColumn();
  //スプレッドシートで最終列を表示する
  Browser.msgBox("最終列取得", "最終列:" + lastColumn, Browser.Buttons.OK);
}

GASのサンプルコードを実行すると、スプレッドシート上にポップアップメッセージで最終列が表示されます。

Google Apps Script(GAS)でスプレッドシートの最終列を取得し、メッセージボックスで表示した結果

今回のケースでは、最終列P列(16番目の列)が取得できていることが確認できました。

特定の範囲内に絞り込みたい場合は?

スプレッドシートのシート全体ではなく、特定の範囲内に絞り込みんだ上での最終列を取得したい時はどうすればよいでしょうか?

思いつくのは、シート内の特定範囲をgetRangeメソッドで取得する方法です。

しかし、getRangeメソッドで取得したセル範囲でgetLastColumnメソッドを実行すると、getRangeメソッドの指定範囲の最終列が出力されます。

Google Apps Script(GAS)でgetRangeで範囲指定した際にgetLastColumnメソッドを実行した結果

上記からこの方法では、スプレッドシートの特定セル範囲での最終列は取得できません。

特定範囲での最終列が何列目か取得するためには、getRangeメソッドで取得したセル範囲を繰り返し処理し、セルに値や数式が格納されているかチェックする処理を実装する必要があります。

GASのgetLastColumnの注意点

Google Apps Script(GAS)でスプレッドシートの最終列を取得できるgetLastColumnメソッドには注意すべきポイントが2点あります。

1つ目の注意点には、誤って入力されたデータでも最終列として認識されてしまう点です。

getLastColumnメソッドでは、誤ってセルに値が入っている場合には、そこが最終列と誤認識されてしまう

上記の例では、S7セルに誤って値が入っているため、最終列がS列(19列)と認識されてしまいました。

通常入力する予定がなかった列でも、ユーザーがキーボードを誤って押すとセルに値が入力されてしまい、そのセルが最終列としてgetLastColumnで取得されてしまいます。

2つ目の注意点では、予め特定の列に採番した数字を入力している場合、数字が入っている部分までが最終列として認識されてしまいます。

今回紹介した例では表の項目名で日付が入っていますが、未来日付まで入力されていると、入力されている箇所まで最終列として取得されます。

その結果、getLastColumnで表の数値が入っていない列まで取得してしまい、GASの処理に失敗することがあります。

番号を振っている場合には、その列を対象外にしたgetRangeメソッドで範囲を設定し、その上で最終列をgetLastColumnで取得します。

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシートのシートの最終列を取得する方法を解説しました。

GASでスプレッドシートのシートを取得した上で、getLastColumnメソッドを使うと最終列が分かります。

列方向にデータを追加するタイプの表をGASで処理する際に便利なので、getLastColumnを活用しましょう。

スプレッドシートの最終行を取得したい場合はこちら↓