大量のデータが入ったスプレッドシートに新しい行を追記するときに最下行まで移動するのに煩わしさを感じます。
キーボードのショートカットキーでCtrl + ↓を押せば移動できますが、それすらも煩わしく感じてしまいます。
そんな時にGASを使ってスプレッドシートを開いたときに自動で最下行に移動できる方法を紹介します。
GASを使わずにスプレッドシートの最下行を表示するには
まずはGASを使う前にどんなことをすれば最下行を表示できるのか考えてみましょう。
下図のような49行目までデータが入ったスプレッドシートを用意しました。
このスプレッドシートを開くとカーソルの初期表示位置はA1セルになります。
この状態でキーボードでCtrl + ↓を押すと下図のように最下行のA49セルに移動します。
この状態でキーボードでCtrl + ↓を押すと下図のように最下行のA49セルに移動します。
これだと最下行に移動はしましたが、新しい行に追記するにはもう一行下に移動させる必要があります。
そうですね。キーボードで↓を押せばA50セルに移動しますね。
そうですね。キーボードで↓を押せば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 + ↑、↓を押していることになります。
実際に押してもらうとどうなるか分かると思いますが下図のようになりますのでお好みで選んでください。