GAS(Google Apps Script)を用いて業務効率化・自動化に取り組んでる方向けに、セルの値を別のセルにコピーする方法を解説・説明していきます。
セルの値のコピペは、基本的な部分になりますので、いろいろなやり方をマスターしちゃいましょう。
こんにちは。当ブログの管理人の『くろん』です。
30代サラリーマン、新規事業推進室に所属。ブラック企業努め時代に身に着けた業務効率化ノウハウをアウトプットしていきます。
読んでくれた方の業務が一秒でも早く終わりますようにの精神で記事書いてます!!
セルの値をコピー(単一セルのコピー)
A1セルの値をC1セルにコピーするという作業を行うGASを考えてみます。
- Range.copyToを使用
- Range.getValueとRange.setValueを使用
- Range.getValuesとRange.setValuesを使用
- setFormulaを使用
今回の説明では、こちらの画像の内容をコピー前の状態として試していきます。
値は『12345』、文字色『赤』、文字背景『黄』の状態です。
Range.copyToを使用
オーソドックスな手法です。
copyToメソッドで、セルの内容を他のセルにコピーすることが出来ます。
function copyTo_copy() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// copyToメソッドを使用して、A1セルをC1セルにコピー
sheet1.getRange("A1").copyTo(sheet1.getRange("C1"));
}
そのまま『copyToメソッド』を使用すると、セルの値のみならず、書式設定(文字色・背景色)もまとめてコピーされてしまいます。
値だけをコピーしたい場合、『{contentsOnly:true}』オプションを使用することで、可能になります。
function copyTo_copy() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// copyToメソッドを使用して、A1セルをC1セルにコピー
sheet1.getRange("A1").copyTo(sheet1.getRange("C1"), {contentsOnly:true});
}
Range.getValueとRange.setValueを使用
『getValue』メソッドで、セルの値を取得し、『setValue』メソッドで、セルに値を反映させる手法です。
function range_getValue_setValue() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// A1セルの値を『getValue』で取得し、『value』変数に保管
let value = sheet1.getRange("A1").getValue();
// C1セルに、『value』変数に保管された値を、『setValue』で入力
sheet1.getRange("C1").setValue(value);
}
Range.getValuesとRange.setValuesを使用
一つ上の項目で紹介した、『Range.getValueとRange.setValueを使用』ととても似ていますが、これは最後に『s』がついていることからも分かる通り、配列を取得することができるメソッドになります。
後述する、『セルの値をコピー(複数の範囲セルのコピー)』で紹介するので、ここでの説明は省きます。
余談ですが、一つのセルの内容もこのメソッドで取得できるので、基本的には『Range.getValueとRange.setValueを使用』を使わずに、『Range.getValuesとRange.setValuesを使用』でいいんじゃないかとも思ってます。
setFormulaを使用
値をコピーとは少し異なりますが、『setFormula』メソッドを指定して、C1セルに『=A1』と参照するような関数を入力しちゃおうという方法になります。
この方法がいいところは、A1セルの入力内容が変更となったときに、関数で参照しているので、自動的にC1セルも内容が変わる点です。
function setFomula_copy() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
//C1セルに『=A1』と『setFomula』メソッドを使用して入力
sheet1.getRange("C1").setFormula("=A1");
}
セルの値をコピー(複数の範囲セルのコピー)
A1:B2セル範囲の値をD1:E2セルにコピーするという作業を行うGASを考えてみます。
- Range.copyToを使用
- Range.getValuesとRange.setValuesを使用
Range.copyToを使用
function copyTo_copyrange() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// copyToメソッドを使用して、A1:B2セル範囲をD1:E2セル範囲にコピー
sheet1.getRange("A1:B2").copyTo(sheet1.getRange("D1"));
}
単一セルのコピーを行うとときと同じですね。コピー先の指定は、コピーさせたい範囲の左上のセルを一つ指定してあげれば、それでOKです。
値のみをコピーさせたいときは、『{contentsOnly:true}』オプションを使用してください。
function copyTo_copyrange() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// copyToメソッドを使用して、A1:B2セル範囲をD1:E2セル範囲にコピー
sheet1.getRange("A1:B2").copyTo(sheet1.getRange("D1"), {contentsOnly:true});
}
Range.getValuesとRange.setValuesを使用
『getValues』メソッドで、範囲のセルの値を配列として取得し、『setValues』メソッドで、範囲のセルに値を反映させる手法になります。
function range_getValues_setValues() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('シート1');
// A1:B2セルの値を『getValues』で取得し、『values』変数に保管
let values = sheet1.getRange("A1:B2").getValues();
// D1:E2セルに、『values』変数に保管された値を、『setValues』で入力
sheet1.getRange("D1:E2").setValues(values);
}
『setValues』メソッドは『copyTo』メソッドと異なり、セル範囲の左上を一つだけgetRangeするとエラーが生じます。『getValues』メソッドで取得した配列の縦横分だけ、getRangeで指定してあげる必要があります。
その点、注意が必要となります。
セルの値をコピーする方法まとめ
セルの値をコピーする方法は、コピー元のセルが一つだけか、それとも範囲になっているかで、使用するメソッドが異なります。
どういうデータをコピーしたいかに応じて、使い分けをする必要があります。