もり(@moripro3)さんがブログで、Google Apps Scriptでスプレッドシートの最終行と最終列を取得するコードを紹介されていました。
Excel VBAで処理するならEndプロパティが活躍しそうな場面です。
もりさんの記事では、セル範囲を配列として取得した後、逆向きにループすることによって、空白セルを意識した最終行・列を取得するコードを紹介されています。
実は、Google Apps ScriptにもVBAのEndプロパティ的な処理が書けるメソッドが用意されているので、今回はそちらを紹介してみようと思います。
Selection.getNextDataRangeメソッド
GASのSelectionオブジェクトには、アクティブなセル範囲から指定した方向に拡張したセル範囲を返すgetNextDataRangeメソッドが用意されています。
文字で書くと分かりづらいですね。
要するに、セルを選択した状態でCtrl + Shift + [方向キー]を押した状態のセルを取得できるメソッドです。
このメソッドを使うことで、VBAのEndプロパティを使ったコードのように最終行や最終列を取得することができます。
function myFunction() { var col = 2; var sheet = SpreadsheetApp.getActiveSheet(); var rng = sheet.getRange(1, col, sheet.getLastRow(), 1); rng.activate(); //指定した列選択 var lastRng = SpreadsheetApp.getSelection().getNextDataRange(SpreadsheetApp.Direction.UP); lastRng.activate(); SpreadsheetApp.getUi().alert(lastRng.getLastRow()); } function myFunction2() { var row = 3; var sheet = SpreadsheetApp.getActiveSheet(); var rng = sheet.getRange(row, 1, 1, sheet.getLastColumn()); rng.activate(); //指定した行選択 var lastRng = SpreadsheetApp.getSelection().getNextDataRange(SpreadsheetApp.Direction.PREVIOUS); lastRng.activate(); SpreadsheetApp.getUi().alert(lastRng.getLastColumn()); }
選択範囲が変わってしまうのが難点ですが、気になる場合は処理前に選択範囲を記憶しておいて、処理後に戻せば良いかと思います。
2019/2/7 追記:
よく考えたら、Range.getNextDataCellメソッドを使えば選択範囲を変更する必要がありませんでした😅
2019/2/8 追記:
コードに一部不具合があったので修正しました。
function myFunction3() { var col = 3; var sheet = SpreadsheetApp.getActiveSheet(); var lastRng = sheet.getRange(sheet.getMaxRows(), col); if (lastRng.isBlank() == true) { lastRng = lastRng.getNextDataCell(SpreadsheetApp.Direction.UP); } lastRng.activate(); //確認用 SpreadsheetApp.getUi().alert(lastRng.getLastRow()); } function myFunction4() { var row = 6; var sheet = SpreadsheetApp.getActiveSheet(); var lastRng = sheet.getRange(row, sheet.getMaxColumns()); if (lastRng.isBlank() == true) { lastRng = lastRng.getNextDataCell(SpreadsheetApp.Direction.PREVIOUS); } lastRng.activate(); //確認用 SpreadsheetApp.getUi().alert(lastRng.getLastColumn()); }
この記事へのコメントはありません。