だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

スプレッドシートのセル範囲をまとめてコピペする操作方法・スクリプトまとめ

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だと、「文字列指定でないとエラーが起きやすい」のと「二次配列で格納されてしまう」という点で、調整が非常に面倒になってしまいます。(このへん、挑戦していくと、けっこうドツボにハマって、時間を喰います。)

ぜひ参考にしていただければ幸いです。

ページ上部に戻る