ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでセル範囲のコピーと貼り付け!copyToの活用

【Googleスプレッドシート】Apps Scriptでセル範囲のコピーと貼り付け!copyToの活用
🛡️ 超解決

Googleスプレッドシートでスクリプトを使ってセル範囲をコピーしたい場面は多いです。たとえば、特定のデータを別のシートに転記したり、書式を保持したままテンプレートを複製したりする作業です。Apps ScriptのcopyToメソッドを使えば、こうしたコピー処理を数行のコードで実現できます。この記事では、copyToの基本的な使い方から応用例、注意点までを詳しく解説します。

【要点】copyToでセル範囲を自在にコピーする方法

  • Range.copyTo(destination): コピー元の範囲に対して呼び出し、コピー先の範囲を引数に指定します。書式や数式もそのままコピーされます。
  • オプションオブジェクト {pasteType}: 値のみ、書式のみなど貼り付けの種類を指定できます。省略時は通常の貼り付け(すべて)です。
  • 別シート・別ファイルへのコピー: コピー先範囲を別シートや別スプレッドシートの範囲として取得することで、シート間・ファイル間のコピーも可能です。

ADVERTISEMENT

copyToメソッドの概要とできること

RangeクラスのcopyToメソッドは、指定した範囲を別の範囲にコピーするメソッドです。コピー元のRangeオブジェクトに対して sourceRange.copyTo(destination, options) のように使います。destinationはコピー先のRange、optionsは省略可能なオブジェクトで、貼り付けの種類を指定できます。オプションの主なプロパティには pasteType があり、SpreadsheetApp.CopyPasteType から選択します。例えば、PASTE_VALUES(値のみ)、PASTE_FORMAT(書式のみ)、PASTE_FORMULA(数式のみ)などです。このメソッドは、単純なコピー(Ctrl+C→Ctrl+V)と同等の動作をスクリプトで行えるため、データ転記やレポート作成の自動化に役立ちます。

copyToの基本的な使い方と応用

ここでは、copyToの具体的なコード例を交えながら、基本的な使い方と応用を紹介します。

同じシート内でのコピー

最も基本的なパターンです。アクティブシート内で範囲をコピーします。

  1. スクリプトエディタを開く
    対象のスプレッドシートを開き、拡張機能→Apps Scriptをクリックします。
  2. 関数を作成する
    以下のコードを貼り付けます。
    function copySameSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var source = sheet.getRange("A1:C5");
    var dest = sheet.getRange("E1:G5");
    source.copyTo(dest);
    }
  3. 実行して確認する
    関数を選択し、実行ボタンを押します。A1:C5の内容がE1:G5にコピーされます。

別のシートへのコピー

シート名を指定してコピー先を取得します。

  1. コードを記述する
    以下のように記述します。
    function copyToAnotherSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var srcSheet = ss.getSheetByName("元データ");
    var destSheet = ss.getSheetByName("結果");
    var source = srcSheet.getRange("A1:B10");
    var dest = destSheet.getRange("A1");
    source.copyTo(dest);
    }
  2. 実行する
    「元データ」シートのA1:B10が「結果」シートのA1を左上としてコピーされます。コピー先の範囲はコピー元と同じサイズに拡張されます。

別のスプレッドシートへのコピー

ファイルIDを使って別のスプレッドシートを開きます。

  1. コピー先のファイルIDを取得する
    貼り付け先のスプレッドシートのURLからID部分(d/…/editの間)をコピーします。
  2. コードを記述する
    以下のように書きます。
    function copyToOtherFile() {
    var srcSS = SpreadsheetApp.getActiveSpreadsheet();
    var srcSheet = srcSS.getActiveSheet();
    var source = srcSheet.getRange("A1:D20");

    var destSS = SpreadsheetApp.openById("YOUR_FILE_ID");
    var destSheet = destSS.getSheetByName("Sheet1");
    var dest = destSheet.getRange("A1");
    source.copyTo(dest);
    }

  3. 権限を承認して実行する
    初回実行時にはアクセス権限の承認が必要です。指定したファイルに対して読み取り権限があることを確認してください。

値のみをコピーする

数式や書式を除去し、値だけを貼り付けたい場合に使います。

  1. pasteTypeオプションを指定する
    以下のコードを実行します。
    function copyValuesOnly() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var srcSheet = ss.getActiveSheet();
    var source = srcSheet.getRange("A1:C5");
    var dest = srcSheet.getRange("E1:G5");
    source.copyTo(dest, {pasteType: SpreadsheetApp.CopyPasteType.PASTE_VALUES});
    }
  2. 実行を確認する
    値だけが貼り付けられ、元の数式や書式はコピーされません。

書式のみをコピーする

値は変えずに書式だけを適用したい場合に使います。

  1. pasteTypeをPASTE_FORMATに変更する
    上記のコードのpasteTypeを SpreadsheetApp.CopyPasteType.PASTE_FORMAT に変更します。
  2. 実行する
    コピー先のセルに書式のみが適用されます。

copyTo使用時の注意点とよくあるミス

コピー先の範囲がコピー元と重なる場合

コピー元とコピー先の範囲が重なっていると、正しくコピーされないことがあります。特に、コピー元を切り取る操作(CUT)では重なりはエラーの原因になります。通常のコピー(PASTE_NORMAL)でも、上書きによるデータ消失のリスクがあるため、重ならないように範囲を設定してください。

別ファイルへのコピーで権限エラーが発生する

別のスプレッドシートにアクセスするには、そのファイルに対する読み取り権限が必要です。また、スクリプトの実行時にアクセス許可を求められるため、承認ダイアログで許可をしてください。権限がない場合はエラーになります。

オプションの指定ミスで意図しない貼り付けになる

pasteTypeを指定しない場合、すべての内容(値、書式、数式、条件付き書式など)がコピーされます。特定の要素だけをコピーしたい場合は、必ずオプションを明示的に指定しましょう。間違った定数を使うと、予期しない結果になります。

パフォーマンスを考慮したループ処理

大量のセルを1つずつコピーするループは非効率です。可能な限り、一度にまとめてコピーできる範囲を指定してください。どうしてもループが必要な場合は、SpreadsheetApp.flush()を適宜呼び出して処理を即座に反映させると、動作が安定します。

ADVERTISEMENT

pasteTypeオプションの一覧と用途

PasteType 説明 使用例
PASTE_NORMAL すべてを貼り付け(デフォルト) source.copyTo(dest)
PASTE_VALUES 値のみ貼り付け 計算結果だけコピーしたい場合
PASTE_FORMAT 書式のみ貼り付け 配色や罫線だけを適用したい場合
PASTE_FORMULA 数式のみ貼り付け 数式だけを複製したい場合
PASTE_COLUMN_WIDTHS 列幅のみ 列幅を合わせたい場合
PASTE_CONDITIONAL_FORMATTING 条件付き書式のみ 条件付き書式をコピー
PASTE_DATA_VALIDATION データの入力規則のみ 入力規則をコピー
PASTE_NO_BORDERS 枠線なしで貼り付け 枠線を除外したい場合

各PasteTypeを組み合わせて利用することはできません。必要な貼り付けの種類に応じて適切な定数を選んでください。

まとめ

この記事では、copyToメソッドの基本から応用までを解説しました。コピー元の範囲に対してコピー先の範囲とオプションを指定するだけで、書式や数式を維持したコピーや、値だけのコピーが行えます。さらに別シートや別ファイルへのコピーも可能で、スクリプトによるデータ転記の自動化が実現します。次のステップとしては、onEditトリガーと組み合わせて特定の操作時に自動コピーする仕組みや、配列を活用した一括コピーを試してみると良いでしょう。SpreadsheetApp.CopyPasteTypeの他の定数も確認し、用途に合わせて使い分けてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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