スプレッドシートのセル範囲をまとめてコピペする操作方法・スクリプトまとめ
Google app script(GAS)を使って、スプレッドシートのセル範囲をコピ―して、まとめてペーストする方法を紹介します。
目次
セル範囲をコピペするソースコード
メソッドは、getRange、getValues、setValuesを使います。
ソースコードがこちら。
/****************************************************************
case01:単一列
****************************************************************/
// 現在のスプレッドシートの取得
var ss_active_all = SpreadsheetApp.getActiveSpreadsheet();
// セル範囲のコピー
var data = ss_active_all.getRange("A1:A10").getValues();
// ペースト
ss_active_all.getRange("C1:C10").setValues(data);
// dataの中身
// [[A1], [A2], [A3], [A4], [A5], [A6], [A7], [A8], [A9], [A10]]
/****************************************************************
case02:複数列
****************************************************************/
// セル範囲のコピー
var data = ss_active_all.getRange("A1:B10").getValues();
// ペースト
ss_active_all.getRange("C1:D10").setValues(data);
// dataの中身
// [[A1, B1], [A2, B2], [A3, B3], [A4, B4], [A5, B5], [A6, B6], [A7, B7], [A8, B8], [A9, B9], [A10, B10]]
とくに難しいことはないですが、注意点がいくつかあります。
セル範囲のコピペでは文字列記述を推奨
getRange自体には、("A1")の文字列記述と(1,1)の数字記述が可能ですが、getValuesとsetValuesを使う場合、数字記述だと、よくわからないエラーが起きやすいです。そのため、文字列指定にしておいたほうが良いです。
セル範囲の数字記述をするにはシートオブジェクトを使う
getRange部分にて、数字記述をしたい場合、スプレッドシートのオブジェクトからは指定できません。シートのオブジェクトから指定しないとエラーが起きますので、ここも注意点です。
先ほどのソースコードはスプレッドシートのオブジェクトで操作していますので、getRangeの中を数字記述にするとエラーが返ってきます。
getValuesの取得は二次配列となる
ソースコード中にて紹介していますが、getRangesでセル範囲のデータを取得すると、A1:A10の単一列であろうが、その格納した配列は二次配列となります。
▼このように保存される。
[[A1], [A2], [A3], [A4], [A5], [A6], [A7], [A8], [A9], [A10]]
これはLogger.log();で観測してあげると、すぐに分かります。
そのため、もし、まとめて取得したデータから、どこか指定の部分を抜き出す場合は、二次配列を呼び出す記述をしないとエラーになりますので気をつけてください。
セル一つのデータを取り扱う時は「***Values」ではなくて「***Value」のメソッドになる
とても紛らわしいのですが、下記の点に気をつけて下さい。
・セル単一の場合
⇒getValue
⇒setValue
・セル範囲の場合
⇒getValues
⇒setValues
※複数形を示すsの有無に注意する。
単一のデータの出し入れをする場合は、getValueとsetValueを使ったほうが良いです。
まとめ
個人的に、スプレッドシートのセルデータを取り扱う時は、getValueとsetValueで個別に読み取っていく方法をおススメします。
for文などでループ処理をする場合、getValuesとsetVlauesだと、「文字列指定でないとエラーが起きやすい」のと「二次配列で格納されてしまう」という点で、調整が非常に面倒になってしまいます。(このへん、挑戦していくと、けっこうドツボにハマって、時間を喰います。)
ぜひ参考にしていただければ幸いです。