ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでシートを複製してテンプレート化!月次シートの自動生成

【Googleスプレッドシート】Apps Scriptでシートを複製してテンプレート化!月次シートの自動生成
🛡️ 超解決

毎月同じフォーマットのシートを手動で複製していると、作業が煩雑になりミスも発生しやすくなります。GoogleスプレッドシートにはApps Scriptという自動化機能が備わっており、テンプレートシートから月次シートを自動生成できます。この記事では、Apps Scriptを使ってシートを複製し、日付に基づいた名前で新しいシートを作成する方法を解説します。スクリプトの書き方からトリガー設定まで、初心者でもわかりやすく説明しますので、ぜひご活用ください。

【要点】Apps Scriptで月次シートを自動生成する3ステップ

  • テンプレートシートの準備: 複製元となるフォーマット済みのシートを1つ作成し、名前を「テンプレート」など固定名にしておきます。
  • スクリプトの記述: シートを複製し、現在の年月をシート名に付ける関数を書きます。日付の取得には Utilities.formatDate を使用します。
  • 時間主導型トリガーの設定: 毎月1日などに自動実行するトリガーを設定すると、完全自動化が実現します。

ADVERTISEMENT

月次シート自動生成の準備とスクリプトの基本構成

まず、テンプレートとなるシートを用意します。作成したいフォーマット(見出しや関数、書式など)をすべて設定したシートを1枚作り、そのシート名を「テンプレート」に変更しておきましょう。この名前はスクリプト内で複製元として指定するため、間違いのない名前にします。次に、スクリプトエディタを開きます。メニューから「拡張機能」→「Apps Script」を選択すると、別タブでエディタが起動します。

スクリプトは以下のような構造になります。関数名は任意ですが、ここでは createMonthlySheet とします。この関数内で、アクティブなスプレッドシートを取得し、テンプレートシートを複製して、新しいシート名を「2025年4月」のような形式に設定します。日付の取得には new Date() で現在日時を取得し、Utilities.formatDate() で指定した書式に変換します。

Apps Scriptでシートを複製して名前を付ける手順

実際のコードを記述しながら、手順を追って説明します。以下のスクリプトをエディタにコピーして貼り付けてください。

function createMonthlySheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var template = ss.getSheetByName('テンプレート');
  if (!template) {
    SpreadsheetApp.getUi().alert('テンプレートシートが見つかりません。');
    return;
  }
  var now = new Date();
  var year = now.getFullYear();
  var month = now.getMonth() + 1; // getMonth()は0始まりなので+1
  var sheetName = year + '年' + month + '月';
  // 同名シートが存在する場合はスキップ
  if (ss.getSheetByName(sheetName)) {
    return;
  }
  var newSheet = template.copyTo(ss);
  newSheet.setName(sheetName);
  // 必要に応じて新しいシートをアクティブにするなど
  ss.setActiveSheet(newSheet);
}
  1. スプレッドシートとテンプレートシートの取得
    SpreadsheetApp.getActiveSpreadsheet() で現在のスプレッドシートを取得し、getSheetByName('テンプレート') でテンプレートシートを取得します。テンプレートが見つからない場合はエラーメッセージを表示して終了します。
  2. 新しいシート名の生成
    new Date() で現在日時を取得し、年と月を取り出します。月は0から始まるため、+1して正しい月にします。そして「2025年4月」のような文字列を作成します。
  3. 同名シートの重複チェック
    既に同じ名前のシートが存在する場合、スクリプトが何度も実行されて重複するのを防ぐために、getSheetByName で存在確認をし、あれば何もせずに終了します。
  4. シートの複製と名前変更
    template.copyTo(ss) でテンプレートをスプレッドシート内にコピーします。コピーされたシートの名前は自動的に「テンプレートのコピー」などになるため、setName(sheetName) で目的の名前に変更します。
  5. オプション: シートをアクティブにする
    ss.setActiveSheet(newSheet) で作成したシートをアクティブにすると、ユーザーがすぐに作業を始められます。必要に応じて追加してください。

時間主導型トリガーで毎月自動実行する設定手順

スクリプトが完成したら、自動化のためにトリガーを設定します。Apps Scriptエディタの左側メニューから「トリガー」(時計アイコン)をクリックします。「トリガーを追加」ボタンを押し、以下のように設定します。

  1. 実行する関数を選択
    先ほど作成した createMonthlySheet を選択します。
  2. イベントのソースを「時間主導型」に
    「時間主導型」を選びます。
  3. 時間ベースのトリガーのタイプを選択
    「月タイマー」を選びます。これで毎月指定した日に実行できます。
  4. 月のうち何日目に実行するか
    「1日」などを選択します。月初にシートを作成したい場合は1日が適切です。なお、1日が休日の場合はその前後になることもありますが、基本的には指定日に実行されます。
  5. 時刻を選択
    例えば「午前9時〜10時」など、実行したい時間帯を選びます。深夜や早朝を選ぶと、日中に気づかないうちにシートが生成されます。
  6. 通知設定と保存
    エラー時の通知メールを受け取るかどうかを設定し、「保存」をクリックします。初回は承認が必要な場合があります。

これで、毎月1日に自動的にシートが複製され、新しい月のシートが生成されるようになります。初回実行時には権限の承認画面が表示されますので、内容を確認して許可してください。

ADVERTISEMENT

注意点とよくあるトラブル

テンプレートシートの名前を間違えるとエラーになる

getSheetByName で指定するシート名が実際のシート名と完全に一致しないと、スクリプトがエラーになります。シート名の前後に余分なスペースがないか確認してください。また、テンプレートシートを削除してしまわないように注意します。

同じ月に複数回実行されるとシート名が重複する

先ほどのコードでは、同名シートが存在する場合は何もしないようにしています。しかし、トリガーが誤って複数設定されたり、手動で実行した場合には重複を防げます。万が一、同じ月のシートを再度作りたい場合は、シート名を「2025年4月_2」などに変更するロジックを追加してもよいでしょう。

スクリプトの実行に失敗したときの対処

トリガーの実行が失敗すると、Apps Scriptのエディタの「実行数」タブにエラーログが表示されます。よくある原因は、スプレッドシートの権限の問題や、テンプレートシートの不存在です。ログを確認して修正してください。また、トリガーの設定画面から「実行ログ」も確認できます。

スクリプトの実行時間制限に注意

Google Apps Scriptには1回の実行あたりの最大実行時間があります(コンシューマーアカウントで6分、Google Workspaceアカウントで30分)。シートの複製自体は一瞬で終わるため問題になりませんが、大量のデータ処理を同時に行う場合は注意が必要です。

まとめ

この記事では、Apps Scriptを使ってテンプレートシートを複製し、月次シートを自動生成する方法をご紹介しました。わずか数行のスクリプトで、毎月のシート作成作業を完全に自動化できます。特に、copyToメソッドとUtilities.formatDateの組み合わせがポイントです。さらに応用として、シート名に「2025年4月_売上」のように複数の情報を含めたり、複数のテンプレートを用意して週次や四半期ごとに生成することも可能です。ぜひ、ご自身の業務に合わせてカスタマイズしてみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。