【GAS】スプレッドシートの値をコピーする方法

laptop-coffee-on-desk プログラミング

スプレッドシートでGoogle Apps Script(GAS)が使えるようになれば、いろいろなことが自動化できるようになります。

GASは、Googleが提供するサービスの1つです。JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。

GASを使って、スプレッドシートのセルをコピーする方法について説明します。

スプレッドシートでGASを使うには

スプレッドシートを開いて、「拡張機能」→「Apps Script」をクリックします。

spreadsheet-container-bound-script

スクリプトエディタが開くので、ここにスクリプトを書いていきます。

script-editor

コピーする2つの方法

セルをコピーするには大きく2つの方法があります。

  • 値を取得して代入する
  • copyToメソッドを使う

書式もコピーしたいなら、copyToメソッドを使います。

値を取得して代入する

1つ目の方法は、元のセルの値を取得して、その値をコピー先のセルに代入するという方法です。

値の取得と代入には、次の2つのメソッドを使います。

  1. 値を取得:getValue()
  2. 値を代入:setValue()

以下のスクリプトを実行すれば、A1セルの値を同じシートのB1セルに代入します。

function myFunction() {
  //アクティブシートの取得
  const sheet = SpreadsheetApp.getActiveSheet();
  
  //A1セルの値の取得
  const copyValue = sheet.getRange('A1').getValue();

  //B1セルに値の代入
  sheet.getRange('B1').setValue(copyValue);
}

違うスプレッドシートの「シート2」という名前のC1セルに代入したい場合は、「openById(id)」や「getSheetByName(name)」などを使ってシートを指定します。

9行目の「スプレッドシートのID」という部分は、コピー先のスプレッドシートのIDに書き換えてください。

function myFunction() {
  //アクティブシートの取得
  const sheet = SpreadsheetApp.getActiveSheet();
  
  //A1セルの値の取得
  const copyValue = sheet.getRange('A1').getValue();

  //別のシート指定
  const anotherSheet = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('シート2');

  //C1セルに値の代入
  anotherSheet.getRange('C1').setValue(copyValue);
}
spreadsheet-id

セルを指定するには「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」のように指定していきます。

copyToメソッドを使う

値の代入は、セルの書式をコピーすることはできません。書式もコピーしたい場合はcopyToメソッドを使います。

別のスプレッドシートにコピーするのに、copyToメソッドは使えません。

別のスプレッドシートにコピーしようとすると、「Exception: Target range and source range must be on the same spreadsheet.」とエラーが出ます。

同じスプレッドシートの別シートへのコピーにcopyToメソッドは使えます。

セルの範囲をコピーする

copyTo(destination)」を使えば、セル範囲の値と書式の両方をコピーできます。

destinationは、セル範囲です。

以下は、A1セルをB1セルにコピーするスクリプトです。

function myFunction() {
  //アクティブシートの取得
  const sheet = SpreadsheetApp.getActiveSheet();
  
  //A1セルをB1セルにコピー
  sheet.getRange('A1').copyTo(sheet.getRange('B1'));
}

書式を選択してコピーする

copyTo(destination, copyPasteType, transposed)」を使えば、書式を選択して貼り付けることができます。

destinationは、セル範囲です。

copyPasteTypeは、貼り付け方法を指定します。

transposedは、転置して貼り付けるか指定します。転置する場合は「true」、転置しない場合は「false」を指定します。

copyPasteTypeには以下のようなプロパティがあります。

  • PASTE_NORMAL:貼り付け
  • PASTE_VALUES:値のみ貼り付け
  • PASTE_FORMAT:書式のみ貼り付け
  • PASTE_FORMULA:数式のみ貼り付け
  • PASTE_CONDITIONAL_FORMATTING:条件付き書式のみ貼り付け
  • PASTE_DATA_VALIDATION:データの入力規則のみ貼り付け
  • PASTE_COLUMN_WIDTHS:列の幅のみ貼り付け
  • PASTE_NO_BORDERS:枠線を除くすべてを貼り付け

以下のスクリプトは、A1セルからC1セルまでを値のみコピーして、D1セルに貼り付けます。そのときに行と列を入れ替えて貼り付けています。

function myFunction() {
  //アクティブシートの取得
  const sheet = SpreadsheetApp.getActiveSheet();
  
  //A1セルをC1セルを転置してD1セルに値のみ貼り付け
  sheet.getRange('A1:D1').copyTo(sheet.getRange('D1'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, true);
}
gas-range-copy-value-done

まとめ

スプレッドシートの値をコピーするには、大きく「setValue()」を使う方法と「copyTo()」を使う方法があります。

セルの書式などを貼り付けたいときは「copyTo(destination)」を使います。

特殊貼り付けをするときは「copyTo(destination, copyPasteType, transposed)」を使います。

参考

Class Range – Google Developers

タイトルとURLをコピーしました