ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでフォーマットだけをコピーする!copyFormatToRange

【Googleスプレッドシート】Apps Scriptでフォーマットだけをコピーする!copyFormatToRange
🛡️ 超解決

スプレッドシートで特定のセル範囲の書式だけを別の場所にコピーしたい場面はありませんか。手動で書式設定を再現するのは面倒です。Apps ScriptのcopyFormatToRangeメソッドを使えば、書式のみを簡単にコピーできます。本記事では、copyFormatToRangeの基本的な使い方から注意点までを解説します。

【要点】copyFormatToRangeで書式だけをコピーする方法

  • copyFormatToRangeの構文: 対象範囲の書式を指定した行・列から始まる同じサイズの範囲にコピーします。
  • 引数の指定順序: コピー先のシート、開始行、開始列、行数、列数を正確に指定します。
  • 実行前の確認: コピー先の範囲が元の範囲と同じサイズであることを確認してから実行します。

ADVERTISEMENT

copyFormatToRangeとは?フォーマットのみをコピーする仕組み

copyFormatToRangeは、GoogleスプレッドシートのApps Scriptで使えるRangeクラスのメソッドです。このメソッドは、指定したセル範囲の書式設定だけを別の範囲にコピーします。コピーされる書式は、フォントの種類やサイズ、文字色、背景色、罫線、表示形式などです。値や数式はコピーされません。

書式だけをコピーできるため、データを保持したまま見た目だけを変更したい場合に便利です。たとえば、定型のレポートで毎月データを差し替える際に、書式だけを繰り返し適用するといった使い方ができます。

copyFormatToRangeの基本的な構文は次のとおりです。sourceRange.copyFormatToRange(シート、行、列、行数、列数)という形式で、コピー先の開始行と開始列、およびコピーする行数と列数を指定します。このとき、コピー元とコピー先の範囲サイズが一致している必要があります。

copyFormatToRangeの基本的な書き方と使用手順

ここからは、実際にスクリプトを書いてcopyFormatToRangeを実行する手順を説明します。以下の手順に従って操作してください。

  1. スクリプトエディタを開く
    コピーしたい書式が含まれているスプレッドシートを開きます。メニューの「拡張機能」から「Apps Script」をクリックして、スクリプトエディタを起動します。
  2. 関数を作成する
    エディタに次のようなコードを記述します。関数名は任意ですが、ここではcopyFormatOnlyとします。
    function copyFormatOnly() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sourceSheet = ss.getSheetByName('Sheet1');
      var targetSheet = ss.getSheetByName('Sheet2');
      var sourceRange = sourceSheet.getRange('A1:C3');
      sourceRange.copyFormatToRange(targetSheet, 1, 1, sourceRange.getNumRows(), sourceRange.getNumColumns());
    }
  3. コードの内容を確認する
    このコードでは、Sheet1のA1:C3の書式をSheet2のA1から同じサイズの範囲にコピーします。コピー先の開始位置は第2引数と第3引数で指定し、ここでは行1、列1を指定しています。第4引数と第5引数にはコピー元の行数と列数を設定します。
  4. スクリプトを保存する
    エディタ上部のフロッピーディスクアイコンをクリックして、プロジェクトを保存します。初めて保存する場合はプロジェクト名を指定します。
  5. 関数を実行する
    関数のドロップダウンリストからcopyFormatOnlyを選択し、▶ボタンをクリックして実行します。初回の実行時には権限の承認を求められます。「権限を確認」をクリックし、自分のアカウントを選んで「許可」を押してください。

実行後、Sheet2のA1からC3の範囲にSheet1の書式が反映されていることを確認できます。値はそのままで書式だけがコピーされているはずです。

旧バージョンの構文を使う場合

copyFormatToRangeには、引数の順序が異なる旧バージョンの構文もあります。sourceRange.copyFormatToRange(シート、列開始、列終了、行開始、行終了)という形式です。たとえば、同じ内容を旧構文で書くと次のようになります。

sourceRange.copyFormatToRange(targetSheet, 1, 3, 1, 3);

これは列1から列3まで、行1から行3までの範囲を指定しています。どちらの構文でも同じ結果が得られますが、新しい構文のほうが直感的に使いやすいでしょう。

よくある失敗例と注意点

コピー先の範囲サイズが合わない

copyFormatToRangeでは、コピー元とコピー先の範囲サイズを一致させる必要があります。たとえば、コピー元が3行3列なのに、コピー先に2行2列を指定するとエラーが発生します。必ずsourceRange.getNumRows()やgetNumColumns()を使って動的にサイズを取得すると安全です。

コピー先のシートが存在しない

指定したシートが存在しない場合、スクリプトはエラーで停止します。事前にgetSheetByNameでシートを取得し、存在確認を行ってください。必要に応じてinsertSheetで新しいシートを作成してからコピーします。

書式が一部だけコピーされる

一部の書式設定が正しくコピーされない場合があります。たとえば、セル内の特定の文字だけに書式を適用している場合、その部分の書式はコピーされません。copyFormatToRangeはセル全体の書式設定をコピーするため、部分的な書式は維持されないことを理解しておきましょう。

実行権限の承認が必要

スクリプトを初めて実行するとき、スプレッドシートへのアクセス権限を求められます。これはApps Scriptの仕様です。必ず自分のアカウントで許可してください。許可しないとスクリプトは実行できません。

ADVERTISEMENT

copyFormatToRangeと他の書式コピー方法の比較

方法 特徴 メリット デメリット
copyFormatToRange 書式のみをプログラムでコピー 自動化に適しており、値はそのまま保持 サイズが一致する必要がある
copyTo(値と書式をコピー) 値と書式を同時にコピー 値も含めて複製できる 値の書き換えが発生する
手動の書式ペインタ マウス操作で書式をコピー 特別な知識が不要 手動操作が必要で大量処理には不向き
setBackground/setFont等の個別設定 一つの書式属性だけを設定 細かい制御が可能 コードが長くなりがち

状況に応じて適切な方法を選びましょう。大量のセルに対して定期的に書式を適用するなら、copyFormatToRangeが最も効率的です。

まとめ

copyFormatToRangeを使うと、スプレッドシートの書式だけをプログラムで簡単にコピーできます。値はそのままに、見た目だけを統一したいときに便利です。この記事で紹介した基本的なコードを応用すれば、複雑なレポートの自動整形も可能です。次はトリガーと組み合わせて、定期的に書式を更新する処理にも挑戦してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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