スプレッドシートにシートの存在するかGASでチェックする確認方法

2022年1月7日

スプレッドシート内に、特定のシート名が存在するか、Google Apps Script(GAS)でシートの有無をチェックする方法を解説します。

getSheetByNameメソッドの実行結果によってシートがあるか確認できます。

GASでシート取得するgetSheetByName

Google Apps Script(GAS)でスプレッドシートを扱う際に、必ずシートの読み込みが発生します。

スプレッドシートに紐づくコンテナバインド型GASスクリプトで、シートが1枚しかない場合はgetActiveSheet()メソッドで取得可能です。

しかし、スプレッドシート内に複数シートがある場合、GASでシートを取得する際にシート名を指定するgetSheetByNameメソッドを使います。

スプレッドシートと連携したGASスクリプトの多くで、getSheetByName('シート名’)が利用されています。

GASのスプレッドシートにあるシートの読み込み方法については以下の記事で解説しています。

シート存在チェックのGASメソッドはない

Google Apps Script(GAS)にはシートの存在をチェックするメソッドは用意されていません。

存在チェックのメソッドは「is○○」という命名ルールのものが多いです。

しかし、スプレッドシートに対し、GASでisを入力してサジェストされるメソッドにはシート存在チェックするようなメソッドが表示されません。

getSheetByNameでシート存在チェック可能

シートの存在をチェックする関数は前述した通り、Google Apps Script(GAS)の標準メソッドにはありません。

しかし、実は、getSheetByNameの実行結果(戻り値)を確認することで、GASのスクリプトでシートの有無をチェックできます。

getSheetByNameでスプレッドシートに存在しているシートを取得した場合、変数にシートに関する情報が格納されています。

それに対し、getSheetByNameメソッドで存在しないシート名を読み込んだ場合、エラー等は起きず、変数は「null」となります。

そうしたgetSheetByNameメソッドの挙動から、「nullになっていればシートが存在しない、それ以外はシートが存在する」と判定できます。

シートの存在チェックするGASサンプルコード

実際にgetSheetByNameメソッドのシートの存在チェックするGoogle Apps Script(GAS)の関数のサンプルコードを紹介します。

サンプルコードでは、上記のスプレッドシートに存在しているシートかどうかチェックします。

スプレッドシートには「データ一覧」、「設問」、「回答項目」の3つのシートが存在しています。

function myFunction() {
  //スプレッドシートのシートをgetSheetByNameで読み込み
  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("存在しないシート");
  //読み込んだシート名が存在するかif文で確認
  if(!ss){
    console.log('シートが存在していません');
  }else{
    console.log('シートが存在するので、処理実行します');
    //以降シートが存在するので実行したい処理を記述

  }
}

前述したスプレッドシートには存在しないシート「存在しないシート」を読み込み、読み込んだシート変数でif文によるnullチェックを行います。

nullだった場合は、シートが存在していないため処理を行わず、それ以外の場合にelse内で処理を実行します。

GASサンプルコードを実行すると、存在しないシートなので、nullとしてif文で判定できています。

3行目のgetSheetByNameメソッドで読み込むシートを存在するものに変更すると、if文の条件分岐でnullではないため、else以下の処理が実行されます。

このようにシート有無はgetSheetByNameメソッドがnullかどうかで判定可能です。

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシート内のシートの有無をチェックする方法を紹介しました。

getSheetByNameメソッドで存在しないシート名を引数に指定した場合、nullになります。

そのため、getSheetByNameメソッドの戻り値がnullかどうかで条件分岐することで、シート有無をチェック可能です。

スプレッドシートに複数シートが存在する場合、getSheetByNameメソッドを使う頻度は多いです。

しかし、多人数で共同編集しているシートの場合、シート名が変更されて挙動がおかしくなることがあるので、GASスクリプトではシートが存在するかチェックした上で処理を実行するようにしましょう。