【GAS】アクティブなシートを取得する

getActiveSheet GAS

GASでアクティブなシートを取得する方法は簡単、次のコードを書くだけです。

SpreadsheetApp.getActiveSheet()

これで現在使用しているスプレッドシートを取得できます。

さて、ここで問題です。トリガー設定した場合、どのシートが対象となるでしょうか?

スプレッドシートを開かなくても時間で稼働するトリガー、つまりアクティブなシートは存在しないはず。予期せぬエラーに遭遇しないためにもアクティブシートについてきちんと把握しておきましょう。

アクティブなシートとは?

アクティブなシートとは、現在開いているシートのことです。わかりやすく言うと、セルが選択されているシートとも言えますね。同一ファイルの中に複数シートがある場合でも同様に、現在開いているシートがアクティブシートになります。

もしトリガー設定などでアクティブなシートが選択されていない場合は、一番左のシートが実行されます。getActiveSheetでシートを指定した際に、使用環境を変えてどのシートが実行されるか試してみたので結果をご紹介します。

  • ケース1:同一ファイルのシートを別窓で各シート各セルを選択した状況で開いておく。プログラムはApps Scriptの画面から実行。結果は1番目のシートが実行。
  • ケース2:同一ファイルのシートを別窓で各シート各セルを選択した状況で開いておく。プログラムはシート2からApps Scriptに遷移して実行。結果はシート2が実行。

上記のような結果となりました、つまりアクティブシートが不明な場合は一番左のシートが実行されるということです。

またGASが実行されるのはスクリプトと紐づいたスプレッドシートだけです。スプレッドシート>拡張機能>Apps Scriptの手順で作成していればスプレッドシートとスクリプトは自動で連携されていますので別のプレッドシートファイルを開いていたとしても他のファイルにGASが影響することはありません。

きつね
きつね

正解は「いちばん左のシート(1番目)」ということだね

たぬき
たぬき

ただ使うシートがわかっているなら、シート指定しておくほうが安心ではあるかな

シートを指定する方法

シートを指定するメソッドは、getSheetByNameとgetSheetsの二つがあります。getSheetByNameからご説明します。

シート名を直接指定:getSheetByName

getSheetByNameはシート名を記入して、希望のシートを取得するメソッドです。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName('シート名'); 

シート名をスクリプトに記入しているので、どのファイルが対象なのかがわかりやすくコードの可読性が高まります。また、スクリプトが異なるスプレッドシートで利用したい場合も、シート名の変更だけで適応できるので再利用性も高いです。

しかし、シート名が変更されるとGASは動かないので注意が必要となります。例えば【1月】【2月】…のようにシートが追加される場合は次にご紹介するgetSheetsが活躍することもあります。

シートの順番で指定:getSheets

getSheetsはスプレッドシート内のすべてのシートを配列で取得し、添字を使って希望のシートを取得するメソッドです。

var ss = SpreadsheetApp.getActiveSpreadsheet();
//左から1番目のシート指定
var sheet = ss.getSheets()[0];

例えば左から1番目のシートであれば、getSheets()[0]とすれば取得できます。シート名が変わる場合や最新のシートが特定の場所にある場合に便利です。シートの順番が変わらなければ、スクリプトを修正することもありません。

しかし、シートの順番が誤って変更された場合、スクリプトは関係なく指定したシートを処理します。そのため不特定多数が触るファイルでは、順番を入れ替えないように注意しておく必要があります。

まとめ

以上、GASでアクティブシートを取得する方法でした。

よくGASで使われるアクティブシートですが、データの内容やスクリプト次第ではシートを直接指定した方がいい場合もありますので要件によって使い分けてください。当記事があなたの参考になれば幸いです。

きちんとGASについて学びたい人は「詳解! Google Apps Script完全入門 [第3版]」もおすすめです。クリックするとAmazonに移動します。

コメント

タイトルとURLをコピーしました