GASでアクティブなシートをスプレッドシートから取得する方法(getActiveSheet)

Google Apps Script(GAS)ではスプレッドシートと連携したスクリプトを書くことが多いです。

スプレッドシートからシートを取得する際には、アクティブなシートを取得するgetActiveSheetメソッドを使用します。

そこでGASでアクティブなシートを取得する方法やアクティブなシートの定義を解説します。

GASではスプレッドシートをよく利用

Google Apps Script(GAS)では、スプレッドシートを利用するケースが多いです。

スプレッドシートはGoogleが提供する表計算のクラウドサービスです。

数値データを格納して売上データを格納したり、表計算ソフトなので簡易なデータベースとしても活用できます。

そのため、GASでもスプレッドシートから値を取得して処理を行ったり、処理結果をスプレッドシートに書き込む処理を実装します。

さらにスプレッドシート上からスクリプト実行できるので、シート上で簡単なアプリケーションを作成することも可能です。

GASでアクティブなシートを取得する方法

Google Apps Script(GAS)でスプレッドシートのアクティブなシートを取得するには、getActiveSheetメソッドを使用します。

SpreadsheetApp.getActiveSheet()

上記のメソッドを実行すると、戻り値としてアクティブなシートが取得できます。

SpreadsheetAppクラスに用意されたgetActiveSheetを実行するには条件があります。

当該のスプレッドシートに紐づいたコンテナバインドスクリプトでなければなりません。

コンテナバインド型スクリプトでないと、スプレッドシートと連携がないからです。

getActiveSheetメソッドのメリット

Google Apps Script(GAS)のgetActiveSheetを使用するメリットは、メソッドの実行回数を減らすことができる点です。

通常スプレッドシートからシートを取得するためには、GASのスクリプトで以下の処理が必要になります。

  1. スプレッドシートを読み込む
  2. シート名を指定して取得

一方、getActiveSheetメソッドならメソッド1回実行するだけでアクティブなシートが取得可能です。

スプレッドシートに紐づいたコンテナバインドスクリプトに限定された方法ですが、通常の方法と比較して、メソッドの実行回数を削減できます。

スプレッドシートの各種メソッドは時間がかかるので、メソッド実行を少なくしてスクリプト処理時間も減らせるのが、getActiveSheetのメリットです。

アクティブなシートを取得するGASサンプルコード

実際にGoogle Apps Script(GAS)でアクティブなシートを取得する簡単なサンプルコードを解説します。

function myFunction() {
  //スクリプトが紐づいたスプレのアクティブなシート取得
  const sheet = SpreadsheetApp.getActiveSheet();
  //取得したシート名をスプレッドシートにメッセージ表示
  console.log(sheet.getSheetName());
}

SpreadsheetAppクラスでgetActiveSheetメソッドを実行してアクティブなシートを取得し、アクティブなシート名をログ出力するGASサンプルコードです。

実際にサンプルコードを実行する際には、スプレッドシートで「シート3」を表示させた状態にしておきます。

すると、ブラウザで開いているシート3が実行ログに表示されています。

このようにスプレッドシートのアクティブなシートをGASのgetActiveSheetメソッドで取得できました。

スプレッドシートのアクティブなシートの定義

アクティブなシートというのはどういった定義でしょうか?

アクティブなシートとは「ユーザーがスプレッドシートで表示しているシート」になります。

先程のgetActiveSheetのサンプルコードを実行した際には、シート3をブラウザで開いていたため、シート3がアクティブなシートとして選択されました。

もしユーザーがスプレッドシートを開いていない状態でGASスクリプトをトリガー実行すると、どうなるでしょうか。

スプレッドシートをブラウザで開いていない状態で、getActiveSheetメソッドをトリガー実行すると、先頭シートが実行されます。

そのため複数シートがある場合にGASスクリプトでトリガー実行する場合、getActiveSheetメソッドは非推奨です。

GASでアクティブなシートを変更するには?

実はアクティブなシートをGoogle Apps Script(GAS)で操作することも可能です。

GASのsheetオブジェクトに対してactivateメソッドを実行することで、当該シートをアクティブなシートに設定できます。

AutoWorkerの記事でもスプレッドシートの特定シートをアクティブ化する方法を解説しています↓

アクティブなシートを取得するGASスクリプトではあまりactivateメソッドは使いませんが、アクティブ化したい場合に活用しましょう。

アクティブなシート取得のGAS活用例

スプレッドシート内にシートが1つしかない場合、Google Apps Script(GAS)のgetActiveSheetメソッドで唯一のシートをアクティブなシートとして取得可能です。

そのため、シート1つのみのスプレッドシートなら時間主導型のトリガーでもアクティブなシートとして取得します。

※複数のシートが存在するスプレッドシートでは、前述の通り時間トリガーでアクティブなシート=先頭シート

その他のアクティブなシートを取得するGoogle Apps Script(GAS)の活用事例としては、スプレッドシート上でGASスクリプトを実行することが挙げられます。

function myFunction2() {
  //スクリプトが紐づいたスプレのアクティブなシート取得
  const sheet = SpreadsheetApp.getActiveSheet();
  //取得したシート名をスプレッドシートにメッセージ表示
  Browser.msgBox(sheet.getSheetName());
}

シート上の図形描画にスクリプト割り当てして実行する場合、図形描画が配置されたシートがアクティブなシートになります。

シートが複数ある場合は、シート上からスクリプト実行できるような場合にgetActiveSheetメソッドで

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシートのアクティブなシートを取得する方法を紹介しました。

SpreadsheetAppクラスで利用可能なgetActiveSheetメソッドを実行することで、スプレッドシートに紐づいたGASのコンテナバインドスクリプトでアクティブなシートを取得できます。

スプレッドシートをブラウザで開いている状態で、GASを実行するとアクティブなシートは選択しているシートになります。

一方、トリガー実行などスプレッドシートを開いていない状態では先頭シートがアクティブと判断されます。

シートが1つしか存在しないスプレッドシートの操作や、シート上から図形にスクリプト割り当てて実行する場合にアクティブなシート取得は便利なので、ぜひそうしたケースではgetActiveSheetメソッドを活用しましょう。