現在のシートを複製して新しい名前をつけるの実装コード
Google Apps Script(GAS)を用いて、現在アクティブになっているシートのデータ・書式・数式を丸ごと複製し、指定した新しいシート名を付与する最もシンプルな実装コードです。テンプレートシートの自動複製や定期レポートの自動作成などの実務で即座に活用できます。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const newSheet = sheet.copyTo(ss);
newSheet.setName("複製シート");
仕様と技術的な注意点
copyTo()メソッドは、元のシート内に含まれている値、数式、セル結合、文字色や背景色などの書式設定、さらには条件付き書式を含めたすべての要素を完全に複製し、戻り値として新たに作成されたSheetオブジェクトを返します。引数には複製先となるスプレッドシートオブジェクト(Spreadsheet)を指定するため、同一スプレッドシート内への複製だけでなく、別ファイルのスプレッドシートへ複製して配置することも可能です。
複製直後の状態では、シート名が自動的に「(元のシート名)のコピー」という名称に設定されます。そのため、生成直後にsetName()メソッドを呼び出して意図したシート名へ更新する処理が必須となります。setName()の記述を忘れると、意図しないデフォルト名のシートが作成されてしまうため注意が必要です。
システム開発における最大の注意点(落とし穴)として、指定したシート名がすでに該当スプレッドシート内に存在する場合、スクリプト実行時に「同名のシートが既に存在します」という例外エラーが発生して処理が途中で停止してしまう点が挙げられます。これを回避するためには、重複しないように「202310_売上報告」のように日付やタイムスタンプを付与した命名規則を適用するか、事前に同名シートの有無を確認するチェックロジックを実装することが推奨されます。
実務での活用シーンとハマりポイント
実務における典型的な活用シーンとして、月次レポートや週次報告書の自動生成機能が挙げられます。あらかじめデザインや計算式を組み込んだ「テンプレート」シートを用意しておき、時間主導型トリガー(日次・月次などの定期実行)と組み合わせることで、指定した日時に合わせて「2023年10月度」といった当月用シートを自動生成・初期化する仕組みを簡単に構築できます。
開発現場で初心者が陥りがちなハマりポイントは、テスト実行を繰り返した際や、運用時に同じ処理を複数回叩いてしまった場合に発生する「シート名重複エラー」です。回避策として、ss.getSheetByName("設定したい名前")を実行して戻り値がnull(存在しない)場合のみ複製処理を行うように条件分岐を作成するか、Utilities.formatDate(new Date(), "JST", "yyyyMMdd_HHmmss")などを利用して確実にユニークな名前を動的に生成する実装を検討してください。
この処理の基本メカニズム
この処理は、Google Apps Scriptのスプレッドシートサービス(SpreadsheetApp)におけるオブジェクト指向モデルに基づいています。まずgetActiveSpreadsheet()で操作対象のファイル(Spreadsheetオブジェクト)を取得し、getActiveSheet()で現在アクティブ状態にある特定のSheetオブジェクトを参照します。
次に、sheet.copyTo(ss)を呼び出すことで、参照元のシート情報を元にスプレッドシート全体の最右端へ新しいシートオブジェクトを書き出します。copyTo()メソッドの返り値は新しく生成されたSheetインスタンスそのものであるため、変数(newSheet)に保持して即座にsetName()などのメソッドを呼び出すことができる論理構造になっています。
※本記事は基本的なロジックおよび構文解説です。最新の仕様についてはGoogle Apps Script (GAS)の公式ドキュメントをご確認ください。

