スプレッドシート内のすべてのシートをループ処理するの実装コード
Google Apps Script (GAS) を用いてスプレッドシート内のすべてのシートを動的に取得し、繰り返し(ループ)処理を行うための基本実装コードです。この処理を活用することで、シート数が変動するファイルであっても漏れなく全シートのデータを集計したり、一括で設定を変更したりすることが可能になります。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
for(let i = 0; i < sheets.length; i++) {
Logger.log(sheets[i].getName());
}
仕様と技術的な注意点
Spreadsheet.getSheets() メソッドは、ファイル内に存在するすべてのシートを Sheet オブジェクトの配列(Array)として取得します。戻り値となる配列の要素順は、スプレッドシート上で左から右に配置されているタブの並び順と完全に一致します。取得した配列に対しては、伝統的な for 文だけでなく、forEach メソッドなどの配列操作用構文を用いて各シートへアクセスすることも可能です。
本テクニックは、月別や担当者別で分けられたシートのデータを合算・全集計する場合や、全シートのフォント・枠線・入力規則・保護設定などを一括でフォーマット変更する業務において不可欠な処理です。
実装時の重要な落とし穴と堅牢性の向上: getSheets() で取得される配列には、ユーザーが画面上で非表示に設定しているシートもすべて含まれます。集計対象外にしたい非表示シート(設定用データやマスタシートなど)が処理に巻き込まれるのを防ぐためには、sheets[i].isSheetHidden() メソッドを用いて判定を行い、非表示の場合は処理をスキップする条件分岐(if (sheets[i].isSheetHidden()) continue;)を明示的に組み込むことがコードの安全性を高める上で非常に重要です。
実務での活用シーンとハマりポイント
実際の業務自動化において、この全シートループ処理は多岐にわたるシーンで利用されます。例えば、「1月」から「12月」までの各月別シートに記載された売上数値を合算用シートへ一括転記する処理や、社内共通のフォーマット更新に伴い全シートの特定セル位置へ新しい数式やデザインを一括適用する場面などが挙げられます。
開発現場で初心者が陥りがちなハマりポイントとして、非表示シートの予期せぬ誤処理のほか、「GASの実行時間制限(標準アカウントで6分)」と「スプレッドシートAPI呼び出しのオーバーヘッド」が挙げられます。ループ処理の内部で getValue() や setValue() といったセルへのアクセス操作を何度も繰り返し呼び出すと、処理速度が極端に低下し、実行時間制限オーバーによるエラーを誘発します。処理スピードを最適化しエラーを回避するためには、ループ内での直接的なセル操作を最小限に抑え、データを配列としてメモリ上で扱った後に一括書き込みを行うなどの工夫を凝らすことが堅牢なコード設計につながります。
この処理の基本メカニズム
この処理の基本メカニズムは、Google Apps Scriptが持つオブジェクト階層構造に基づいています。最上位クラスである SpreadsheetApp を起点として、現在アクティブなファイル全体を表す Spreadsheet オブジェクト(変数 ss)を特定し、その配下に存在するすべての Sheet オブジェクトを一括抽出しています。
抽出された配列内の各要素は、個別のシートに対する全操作権限を持っています。インデックス番号(sheets[i])を介して動的にアクセスすることで、シート名の取得(getName())だけでなく、セル範囲の指定やシート自体の表示・非表示判定を順番に処理します。これにより、シートの追加や削除が頻繁に行われる動的な環境であっても、手動での確認や個別記述を必要としない高精度な業務自動化を実現できます。
※本記事は基本的なロジックおよび構文解説です。最新の仕様についてはGoogle Apps Script (GAS)の公式ドキュメントをご確認ください。

