スプレッドシートでGoogle Apps Script(GAS)が使えるようになれば、いろいろなことが自動化できるようになります。
GASは、Googleが提供するサービスの1つです。JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。
GASを使って、スプレッドシートのセルをコピーする方法について説明します。
スプレッドシートでGASを使うには
スプレッドシートを開いて、「拡張機能」→「Apps Script」をクリックします。
スクリプトエディタが開くので、ここにスクリプトを書いていきます。
コピーする2つの方法
セルをコピーするには大きく2つの方法があります。
- 値を取得して代入する
- copyToメソッドを使う
書式もコピーしたいなら、copyToメソッドを使います。
値を取得して代入する
1つ目の方法は、元のセルの値を取得して、その値をコピー先のセルに代入するという方法です。
値の取得と代入には、次の2つのメソッドを使います。
- 値を取得:getValue()
- 値を代入: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);
}
セルを指定するには「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」のように指定していきます。
copyToメソッドを使う
値の代入は、セルの書式をコピーすることはできません。書式もコピーしたい場合は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);
}
まとめ
スプレッドシートの値をコピーするには、大きく「setValue()」を使う方法と「copyTo()」を使う方法があります。
セルの書式などを貼り付けたいときは「copyTo(destination)」を使います。
特殊貼り付けをするときは「copyTo(destination, copyPasteType, transposed)」を使います。
参考
Class Range – Google Developers