Google Apps Script(GAS)でスプレッドシートを操作する際、copyTo()メソッドは非常に強力で便利な機能です。このメソッドを活用することで、シートの複製や別スプレッドシートへのデータコピーが簡単に行え、定型業務の自動化や効率化に大きく貢献します。
この記事では、copyTo()メソッドの基本的な使い方から、複数シートの一括コピー、エラー処理を組み込んだ応用テクニックまで、実用的なサンプルコードを交えて分かりやすく解説します。

copyTo()メソッドの基本構文
はじめに、copyTo()メソッドの基本的な構文を確認しましょう。
// 指定したスプレッドシートにシートをコピーする
Sheet.copyTo(spreadsheet);
このメソッドは、Sheetオブジェクト(コピー元のシート)を、引数で指定したspreadsheetオブジェクト(コピー先のスプレッドシート)に複製します。コピー先のシートは新しく作成され、元のシートのデータや書式設定、保護範囲などもすべて引き継がれるため、テンプレートからのシート生成などに非常に便利です。
同じスプレッドシート内でシートを複製する
最も基本的な使い方として、現在開いているスプレッドシート内でシートを複製する例を見てみましょう。
function duplicateSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const templateSheet = ss.getSheetByName('テンプレート');
// テンプレートシートを同じスプレッドシート内にコピー
const newSheet = templateSheet.copyTo(ss);
// 分かりやすいように新しいシートに名前を付ける
const formattedDate = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd');
newSheet.setName(`データ_${formattedDate}`);
}
このスクリプトを実行すると、「テンプレート」という名前のシートが複製され、「データ_(今日の日付)」という名前の新しいシートが作成されます。
応用的な使い方
基本的な使い方を理解したところで、より実用的な応用例をいくつか紹介します。
複数シートを一括でコピーする
複数のシートを一度にコピーしたい場合は、ループ処理を利用します。以下の関数は、シート名の配列を受け取り、指定したスプレッドシートに一括でコピーします。
function batchCopySheets(sheetNames, destinationSpreadsheet) {
const sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
sheetNames.forEach((name, index) => {
const sourceSheet = sourceSpreadsheet.getSheetByName(name);
if (sourceSheet) {
// コピーを実行
const newSheet = sourceSheet.copyTo(destinationSpreadsheet);
newSheet.setName(`${name}_COPY_${index + 1}`);
// GASの実行時間制限を避けるため、適宜スリープを挟む
if ((index + 1) % 5 === 0) {
Utilities.sleep(1000); // 1秒待機
}
}
});
}
大量のシートをコピーする際は、GASの実行時間制限(通常6分)に注意が必要です。Utilities.sleep()を挟むことで、サーバーへの負荷を軽減し、タイムアウトエラーを防ぐことができます。
エラーハンドリングを組み込んだ安全なコピー処理
実務でスクリプトを運用する際には、予期せぬエラーへの対策が不可欠です。「テンプレートシートが存在しなかった」「コピー先のシート名が重複していた」といったケースを想定し、try...catchブロックでエラーハンドリングを実装しましょう。
function safeCopySheet() {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const templateSheet = ss.getSheetByName('テンプレート');
// テンプレートシートの存在チェック
if (!templateSheet) {
throw new Error('「テンプレート」シートが見つかりません。');
}
const newSheet = templateSheet.copyTo(ss);
// 重複しないシート名を生成
let sheetName = 'コピーシート';
let counter = 1;
while (ss.getSheetByName(sheetName)) {
sheetName = `コピーシート_${counter}`;
counter++;
}
newSheet.setName(sheetName);
} catch (e) {
// エラー内容をログに出力し、ユーザーに通知する
console.error(`エラーが発生しました: ${e.message}`);
SpreadsheetApp.getUi().alert(`処理に失敗しました: ${e.message}`);
}
}
このように堅牢なエラー処理を実装することで、スクリプトが意図せず停止するのを防ぎ、安定した運用が可能になります。
まとめ
copyTo()メソッドは、GASにおけるスプレッドシート操作の基本でありながら、非常に奥の深い機能です。基本的な使い方をマスターするだけで作業効率は格段に向上し、応用テクニックを組み合わせることで、より複雑な業務プロセスの自動化も実現できます。
今回紹介したサンプルコードを参考に、ぜひご自身の業務改善にcopyTo()メソッドを活用してみてください。


GAS(Google Apps Script)を用いて、スプレッドシートのシートをコピーしたい方向けに、『copyToメソッド』を紹介していきたいと思います。業務効率化・自動化で、シートをコピーするのは多用するので、活用していただけると嬉し

スプレッドシートを別のシートにコピーするには、CopyToメソッドやgetValueとsetValueを使用して値をコピー&ペーストするなど様々な方法があります。この記事ではGASでスプレッドシートを別のスプレッドシートにコピーする

スプレッドシートのGASでCopyToを使用して行列コピーしたり、自動で別シートにコピーや値のみコピーなど、CopyToでできることをまとめて解説しています。複数行にコピーする時の範囲指定など、なるべくわかりやすく解説してみたいと思います。

Google Apps Script(GAS)でスプレッドシートにあるシートをコピーする方法を解説します。 GASに用意されているcopyToメソッドを使い、スプレッドシート上のシ...

GASで任意のファイルをコピーしてみる 今回の投稿では、GASを使って任意のファイルをコピーするメソッドをご紹…

概要Google Apps Scriptでスプレッドシートのシートをコピー(複製)する方法です。使用するメソッド構文Sheetオブジェクト.copyTo(spreadsheet)引数パラメーター必須型説明spreadsheet○Spread...

GoogleDrive内のフォルダはドラッグ・アンド・ドロップや切り取り+貼り付けで簡単に移動できますが、コピーは制限がかかっているため、まとめて複製を行うことができません。

Google Apps Script (GAS) でこのセル範囲の移動・コピー・削除を行う方法を説明します。 Range