GASでスプレッドシートの特定シートをアクティブ化する方法(activateメソッド)
スプレッドシートでは現在どのシートがアクティブな状態かという情報を保持しています。
Google Apps Scriptを使えば、任意のシートをアクティブ化することができるので、その方法を解説します。
スプレッドシートではシートの選択状態を保持
スプレッドシートでは、開いているシートがなにかという状態を保持しています。
例えば、上記のスプレッドシートには3つのシートあり、「データ一覧」シートを開いています。
この開いているシートを「アクティブなシート」として取り扱うことができます。
もし、スプレッドシートにシートが1つしかない場合、そのシートが必ずアクティブなシートとなります。
GASではアクティブなシート取得可能
Google Apps Script(GAS)のスプレッドシートに紐づくコンテナバインドスクリプトでは、アクティブなシートを取得することができます。
※GASでスプレッドシートのシートを読み込む方法の解説記事はこちら
アクティブなシートの読み込みの場合、シート名を指定する必要がないため、スクリプトのコード数を削減できます。
さらにシート名を指定しないでよいため、GASスクリプトの流用がしやすくて便利です。
GASスクリプトで特定シートのアクティブ化
ただ、スプレッドシートのシートが複数ある場合、どのシートがアクティブなのか分かりづらいことがあります。
スクリプトに用意されたボタンをクリックしてGASスクリプトを実行する場合は、アクティブなシートが決まっているので問題ありません。
しかし、トリガー登録してGASをスケジュール実行する場合、アクティブなシートが想定と違う場合が出てきます。
そうした場合の対処方法の1つとして、GASのスクリプトで特定シートをアクティブ化する方法があります。
シートをアクティブにするactivateメソッド
Google Apps Script(GAS)でスプレッドシートの特定シートをアクティブ化するため、activateメソッドが用意されています。
sheet.activate()
activateメソッドは、アクティブにしたいsheetオブジェクトで実行します。
activateメソッド実行には引数が必要ありません。
実行すると、アクティブなシートの状態が変更されます。
GASで指定するシートをアクティブ化するサンプルコード
実際にGASで指定のシートをアクティブ化するサンプルコードを解説します。
先程のスプレッドシートに紐づくGASスクリプトを用意して、以下のスクリプトを実行します。
function activateSheet() {
//スクリプトに紐づくスプレッドシートのアクティブなシートを取得
let mySheet = SpreadsheetApp.getActiveSheet();
//シート名をログ出力
console.log("シート名は " + mySheet.getSheetName() + " です。");
//GASでスプレッドシートの「設問」シートをアクティブ化
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("設問").activate();
//再度スプレッドシートのアクティブなシートを取得
mySheet = SpreadsheetApp.getActiveSheet();
//再度シート名をログ出力
console.log("シート名は " + mySheet.getSheetName() + " です。");
}
最初にデフォルトの状態でアクティブなシートを取得します。
そのシート名がなにか確認したあと、アクティブ化したいシートに対し、activateメソッドを実行します。
その後、再度アクティブなシートを取得し、シート名をログ出力してみるサンプルコードです。
1回目のアクティブなシート名と、2回目のアクティブなシート名のログ出力が変化していることが分かります。
さらに、スクリプトが紐づくスプレッドシートのタブを確認すると、アクティベートしたシートが選択されているようになります。
このように、GASのactivateメソッドを活用することで、アクティブなシートの切り替えが可能です。
なお、すでにアクティブなシートに対し、activateメソッドを使ってもエラーは出ず、そのまま同じシートがアクティブのままになります。
まとめ・終わりに
今回、スプレッドシートのアクティブなシートを、Google Apps Script(GAS)で異なるシートに変更するアクティブ化の方法を紹介しました。
アクティブ化したいsheetオブジェクトでactivateメソッドを実行することで、アクティブなシートを切り替えることができます。
実際のGASスクリプトの利用では、アクティブ化が必要になるシーンは少ないですが、activateメソッドが用意されていることは覚えておきましょう。
ディスカッション
コメント一覧
//GASでスプレッドシートの「設問リスト」シートをアクティブ化
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“設問”).activate();
「設問リスト」シートじゃなくて「設問」シートを指定しているように見えます。
Jurock様
コメントありがとうございます。コード内のコメントがご指摘の通り誤っておりました。
画像スクショはすぐに修正が難しいため、コードブロックの方を修正いたしました。
ご指摘いただきありがとうございました。