※本記事はプロモーションを含みます
目次
どのタブを触るかから始まる
Google Apps Script(GAS)はGoogleスプレッドシートの業務を自動化するツール。スプレッドシートの業務を自動化する際、GASで操作するシートの指定を正しく行うことがすべての処理の起点になります。スプレッドシート自体は「ファイル全体」、タブごとのページは「シート」、実際のデータが入る枠は「セル」という階層構造を持ちます。この階層から特定シートを名前で取得するGASの具体的なコードについて、実務の注意点を踏まえて解説します。
「マスタデータ」を名前で取る
「マスタデータ」や「設定」のような特定の名前を持つシートを操作したい場合、GASの処理ではgetSheetByNameメソッドを使用するのが最も一般的です。まずは、基本の実装コードを確認しましょう。
getSheetByName の3行
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("マスタデータ");
Logger.log(sheet.getName());
ファイル全体を取ってからタブを取る
上記のコードはわずか3行ですが、GASでスプレッドシートを操作する上で最も基本的なプロセスを含んでいます。各行の処理内容を確認しましょう。
const ss = SpreadsheetApp.getActiveSpreadsheet();
この行では、現在起動しているスプレッドシートファイル全体を表すオブジェクトを取得し、定数ssに格納しています。SpreadsheetAppはスプレッドシートを操作するためのクラスであり、getActiveSpreadsheet()メソッドを呼び出すことで、アクティブなファイルを指定しています。const sheet = ss.getSheetByName("マスタデータ");
先ほど取得したスプレッドシートオブジェクト(ss)に対して、特定のシートを探し出すgetSheetByNameメソッドを実行しています。カッコの中の引数として"マスタデータ"という文字列を渡すことで、その名前を持つシートオブジェクトを取得し、定数sheetに格納します。Logger.log(sheet.getName());
最後に、取得したシートオブジェクトが正しく機能しているかを確認するため、getName()メソッドを使ってシート名を再度取得し、Logger.logによってGASの実行ログ(コンソール)に出力しています。
見つからないと null
GASのgetSheetByNameメソッドでシートを取得する際、実務でスクリプトを組む上で必ず理解しておくべき重要な仕様が存在します。
| 項目 | 仕様の詳細 |
|---|---|
| 引数 | 取得したいシート名を「文字列(String)」で指定します。大文字・小文字、全角・半角は厳密に区別されます。 |
| 戻り値(成功時) | 指定した名前と完全に一致するシートが見つかった場合、そのシートを操作可能な「シートオブジェクト(Sheet)」として返します。 |
| 戻り値(失敗時) | 指定した名前のシートが存在しない場合は、エラーで止まるのではなくnullを返します。 |
getSheetByNameの仕様とメリット
getSheetByNameはシート名を指定することで、指定されたシートを操作可能なオブジェクトとして返します。シートオブジェクトを取得できれば、シート内のセル範囲を読み書きしたり、フォーマットを変更したりといった操作が実行可能になります。
シートの指定方法にはgetSheets()[0]のように並び順の数字(インデックス)で取得する手段も存在します。ただしインデックス指定は、ユーザーがシートの順番を入れ替えた瞬間に意図しないシートを参照する問題が発生します。なので、名前で直接指定する方法を使えば、シートの並び順が変わっても目的のシートに正確にアクセスできます。
該当シートが存在しない場合の挙動(存在確認)
存在確認において注意すべきなのは、該当するシートが存在しないときにnullが返る点です。スクリプトが即座にエラー停止しないので問題がないように見えます。ただし取得結果がnullのまま後続の処理を進めると、操作を実行した瞬間にスクリプトが停止します。なので、シートを取得した直後に存在確認の処理を記述することが推奨されます。
設定シートの値を読む
getSheetByNameメソッドは、実際の業務自動化スクリプトでどのように使われるのかを確認しましょう。実務でよく使われる具体的な利用シーンを紹介します。
固定名のテンプレートや設定シートへのアクセス
業務で使うツールをGASで開発する場合、スプレッドシート内に「設定」や「マスタデータ」、「テンプレート」といった固定名のシートを用意する設計がよく使われます。というのは、メールの定型文や税率といった設定値をシート側に保存しておけば、GASのプログラム内からその値を安全に取得できるからです。
固定名のシートからデータを読み取る処理を作るなら、getSheetByNameメソッドを活用しましょう。コード内に直接設定値を書き込まずにシートからデータを読み込む構造にしておけば、プログラムを編集できない担当者でもシートの数値を修正するだけでツールの挙動を変更できます。
名前を変えられると取れない
getSheetByNameは便利なメソッドですが、実務の運用においては気を付けるべき注意点が存在します。仕様を把握せずに実装すると、運用を始めた後に予期せぬエラーが発生します。
ユーザーがシート名を手動で変更してしまうケース
大きなトラブルの原因になるのは、共有している他のユーザーがシート名を変更してしまうケースです。スクリプト側が「マスタデータ」という名前でシートを取得しようとしていても、シート名が「最新マスタデータ」などに変更されていると、getSheetByName("マスタデータ")は目的のシートを発見できずにnullを返します。
末尾に余計なスペースが入っているケース
シート名の末尾に透明な空白文字が入ってしまうトラブルも頻繁に発生します。これは、ユーザーがシート名を編集した際に誤ってスペースを入力してしまうことが原因です。GASの文字列一致判定は非常に厳密なので、末尾に不要なスペースが入っているだけでもシートの取得に失敗してエラーが発生します。
エラーを防ぐための存在確認(nullチェック)の実装
シートが存在せずnullが返された状態でsheet.getRange("A1")のような処理を実行すると、プログラムは処理を継続できずに停止します。というのは、存在しないオブジェクトに対してメソッドを実行しようとするとプロパティ読み取りエラーが発生するからです。このエラーを防ぐためには、シートを取得した直後にnullかどうかを判定する処理を必ず記述しましょう。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const targetSheetName = "マスタデータ";
const sheet = ss.getSheetByName(targetSheetName);
// 存在確認:シートが取得できなかった(null)場合の処理
if (sheet === null) {
Logger.log("【エラー】シート「" + targetSheetName + "」が見つかりません。");
Logger.log("シート名が変更されていないか、末尾に余計なスペースが入っていないか確認してください。");
return; // ここで処理を安全に終了させる
}
// 正常に取得できた場合は、以降の処理を続行
Logger.log("シートの取得に成功しました。シート名: " + sheet.getName());
// 例: const data = sheet.getRange("A1:C10").getValues();
if (sheet === null)という条件分岐を入れておけば、シート名が変更されていた場合でもプログラムが突然停止することはありません。なので、実行ログを確認するだけでエラーの原因がシート名やスペースにあると判断できるようになります。エラーの調査にかかる時間を短縮できるため、ツールの運用が非常にスムーズになります。
取った直後に null を見る
GASのgetSheetByNameメソッドを使って「マスタデータ」という名前のシートを取得する方法について解説しました。getSheetByNameは設定シートやマスタデータへアクセスする際に必須となる基礎的なメソッドです。
ただし、手動によるシート名の変更や見えないスペースの混入によってnullが返ってくるリスクが常に存在します。なので、実務でコードを記述する際はシートを取得した直後にnullの確認を行いましょう。この存在確認をコードに含めることで、エラーに強いスクリプトを作成できます。安全な処理を記述して、業務自動化のプログラムを正しく動かしましょう。

