【GAS】シートのセル範囲・複数データをまとめてコピペする操作方法・スクリプトまとめ

エンジニア

Google app script(GAS)を使って、スプレッドシートのセル範囲をコピ―して、まとめてペーストする方法を紹介します。

セル範囲をコピペするソースコード

メソッドは、getRange、getValues、setValuesを使います。

ソースコードがこちら。

とくに難しいことはないですが、注意点がいくつかあります。

セル範囲のコピペでは文字列記述を推奨

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

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

最後に一言

二次配列、めんどい。

この記事が参考になったら「いいね!」

【GAS】シートのセル範囲・複数データをまとめてコピペする操作方法・スクリプトまとめ


SNSのシェアはこちらから!

  • 1
    このエントリーをはてなブックマークに追加
  • Pocket

PROFILE

yoshi

運営者のYoshiと申します。今はフリーランスでWEB制作などしています。過去、エンジニアの頃は、MATLAB/simulink/VBA/C/C++など扱っていました。生産管理、MECE、オブジェクト指向など、当時に得た知識はweb業界に入っても、かなり役立っています。