スプレッドシートを開いたら自動的に最終行に移動してみる

how_to_get_the_last_data_cell_onOpen
URLをコピーする
URLをコピーしました!
目次

スプレッドシートを開いたら自動的に最終行に移動してみる

データがたくさんは格納されたスプレッドシートをメンテナンスするのは何かと骨が折れる作業です。

ファイルを開いてから膨大なデータを下にスクロールして入力位置に移動するのは誰もがやりたくないことの一つではないでしょうか。

Ctrl + ⇩』を押して一気に最終行まで移動しようとしても、データが大量にあると機能しなくなるので、困ったもんです。

本記事はそんな皆さんが今日からすぐに使えるコードを使いながら、SpreadsheetAppのsetCurrentCellのサンプルコードを共有したいと思います。

最終行をアクティブセルにするサンプルコード

早速コード、スプレッドシートを開いた時に自動的に最終のデータ行に移動するコードを共有します。

function onOpen() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheets()[0];
  let maxRow = sheet.getMaxRows();
  let cell = sheet.getRange(maxRow, 1);
  sheet.setCurrentCell(cell);
  let lastRow = sheet.getLastRow();
  cell = sheet.getRange(lastRow, 1);
  sheet.setCurrentCell(cell);
}

スプレッドシートからスクリプトエディタを開いて、上記コードを貼り付ければ、すぐに利用することができます。

自動的に最終行をアクティブセルにする

上記動画のようにコピペして貼り付けるだけですぐに利用できます。

今回のコードのキーポイントは一度シートの最終行(サンプルシートでは1000行目)をアクティブセルにしてから、データが入っている行をアクティブセルにしていることです。

シートの最終行をアクティブセルにしないでデータの最終行をアクティブセルにしてしまうと、古いデータで画面がいっぱいになってしまいます。

シートの最終行をアクティブにせずに行うと次の動画のようになります。

最終行を取得せずにデータが入っている最後の行をアクティブ化するとこうなる

追加でデータを入力したいのは採集データ行の下になりますので、入力エリアが広く見えていた方がその後の作業がやりやすいですよね。

任意のセルをアクティブセルにするコード

本ページでは、スプレッドシートの任意のセルをアクティブセルにするための方法をご紹介します。

  1. setActiveRange(任意の範囲をアクティブレンジに設定する)
  2. setCurrentCell(選択したセルをアクティブセルにする)

関連するメソッドは上記の2つです。違いは後ほどご説明します。

関連するメソッド

アクティブレンジやアクティブセルをを取得するコードに下記の2つがあります。

  1. getActiveRange(選択セルの範囲を取得する)
  2. getCurrentCell(選択セルを取得する)

setActiveRange(range)とsetCurrentCell(cell)のサンプルコード

上記の最終行に移動するコードで利用したのは、setCurrentCellというメソッドになります。似たようなメソッドにsetActiveRangeというものもありますが、どちらも任意のセルをアクティブ状態(クリックして選択された状態)にするコードです。

これらのメソッドを応用して、ファイル起動時に自動的に最終行二移動するということを実現しています。

引数に入れる値

  • range(Rangeオブジェクト) — アクティブセルにしたいRangeオブジェクトを設定

サンプルコード

function sampleCodeForSetActiveRange() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheets()[0];
  let range = sheet.getRange('C1:D4');
  SpreadsheetApp.setActiveRange(range);
  let selection = SpreadsheetApp.getSelection();
  let currentCell = selection.getCurrentCell(); //C1セルを取得
  let activeRange = selection.getActiveRange(); //C1:D4のセル範囲を取得
  let valueForC1 = currentCell.getValue();
  let valuesForC1toD4 = activeRange.getValues();
}

変数の説明

ss = 対象のスプレッドシート
sheet = スプレッドシートファイルの一番左にあるシートタブ
range = C1:D4のセル範囲
selection = 選択範囲を取得
currentCell = C1セルを取得
activeRange = C1:D4のセル範囲を取得
valueForC1 = C1セルの値を取得
valuesForC1toD4 = C1:D4セルの値を取得

2つのコードの違いを比較しやすいと思いまして、一つのサンプルコードでどちらのコードも入れてみました。
どちらもアクティブセルを指定するメソッドではあるのですが、若干の違いがありますので、その部分を含めて解説します。

上記のサンプルコードでは、4行目にC1:D4セルの範囲を取得しています。

setActiveRangeは範囲指定ができるので、getRangeで指定したC1:D4セルの範囲がすべてアクティブの状態になります。

この場合でも、実際に選択されているセルはC1になりますので、activeRangeに対してgetValue()をするとC1の値が取得できます

ただし、activeRangeに対してgetValues()をすると対象の範囲内のすべての値が二次元配列で取得ができます

setActiveRangeはセル範囲をアクティブセルにする

一方で、setCurrentCellは単一セルをアクティブセルにします。

C1:D4のように複数範囲が取得されたrangeに対してsetCuttentCellをすると、一番左上にあるC1セルのみがアクティブの状態になります。

そのため、currentCellに対してgetValue()をすればC1セルの値が取得できます。

currentCellは単一セルになりますので、getValues()をしても結果はgetValue()と変わりません

setCurrentCellは単一セルをアクティブセルにする

どちらも似たようなメソッドですが、使い方に若干の違いがありますので、その点にご注意ください。

まとめ

今回は、アクティブセルを設定するメソッドを応用して、スプレッドシートファイルを開いた際に自動的に最終行二移動する方法をご紹介しました。

大量のデータをメンテナンスしなければならないときは活用していただければと思います。

how_to_get_the_last_data_cell_onOpen

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初心者でもわかるGoogle Apps Script活用のススメの管理人。
業務でラクをするという邪な目的のためにプログラムを独学で勉強し始め、初心者向けのGoogle Apps Scriptの使い方サイトを運営するに至る。
ラクをするためにはどんな苦労も厭わないという考えから、手っ取り早くスキルアップするためにCrowdWorksやLancersなどで仕事を受注し始め、過去にはTopClass PRO Crowd workerに認定された経験を持つ。
現在では、業務効率化システムの開発を行う会社の代表を務める。

コメント

コメントする

目次
トップへ
目次
閉じる