[GAS]スプレッドシート(Spread Sheet)を開いたときに最下行を一番上に表示

GAS

大量のデータが入ったスプレッドシートに新しい行を追記するときに最下行まで移動するのに煩わしさを感じます。
キーボードのショートカットキーでCtrl + ↓を押せば移動できますが、それすらも煩わしく感じてしまいます。

そんな時にGASを使ってスプレッドシートを開いたときに自動で最下行に移動できる方法を紹介します。

GASを使わずにスプレッドシートの最下行を表示するには

まずはGASを使う前にどんなことをすれば最下行を表示できるのか考えてみましょう。
下図のような49行目までデータが入ったスプレッドシートを用意しました。

このスプレッドシートを開くとカーソルの初期表示位置はA1セルになります。
この状態でキーボードでCtrl + ↓を押すと下図のように最下行のA49セルに移動します。
これだと最下行に移動はしましたが、新しい行に追記するにはもう一行下に移動させる必要があります。
そうですね。キーボードでを押せばA50セルに移動しますね。
ということで、次のことがGASで実現できるとよさそうです。
  • スプレッドシートを開いたら自動で
  • キーボードのCtrl + ↓を押して
  • キーボードのを押す

GASを使ってスプレッドシートの最下行を表示するには

GASを使うためにスプレッドシートのメニューバー拡張機能Apps Scriptをクリックします。

Apps Scriptの画面に切り替わります。

ここの右側の枠に以下のコードを追記し、フロッピーのアイコンをクリックします。

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cellpos = sheet.getRange(1,1);
  cellpos.activate();
  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
  sheet.getCurrentCell().offset(1,0).activate();
}

短いロジックなので1行ずつ解説します。
  • function onOpen()
    スプレッドシートを開いたら{から}の間に書かれた内容が自動で実行されます。
  • var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    現在アクティブなシートをsheetという名前で扱えるようにします。
  • var cellpos = sheet.getRange(1,1);
    シートのA1セルをcellposという名前で扱えるようにします。
    ‘A1’と指定することもできますが、個人的にはプログラマーとしての経験もあるので文字列で初期値を設定するのは抵抗があります。
    (1,1)だと1行1列目のセルという意味になります。
  • cellpos.activate();
    A1セルをアクティブにします。
  • sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
    Ctrl + ↓を押した場所にあるセルをアクティブにします。
  • sheet.getCurrentCell().offset(1,0).activate();
    現在のアクティブセルから1行0列移動した場所にあるセルをアクティブにします。

 

以上でGASの入力は終了です。スプレッドシートを閉じて開きなおしてみましょう。
無事に最終行の一行下(A50セル)に自動で移動しました。

 

おまけ

これから入力を始めるのにカーソル位置が画面の下の方になるのは気に入らないという方は次のコードにしてみてください。

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cellpos = sheet.getRange(1,1);
  cellpos.activate();
  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.UP).activate();
  sheet.getCurrentCell().offset(1,0).activate();
}

違いはこの2行が増えたことです。

  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
  sheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.UP).activate();

キーボードでCtrl + ↓Ctrl + ↑を行うロジックです。

全体でキーボード部分を抜き出すとCtrl + ↓Ctrl + ↓Ctrl + ↑を押していることになります。
実際に押してもらうとどうなるか分かると思いますが下図のようになりますのでお好みで選んでください。

 

最新情報をチェックしよう!