こんにちは。エクスチュアの岩川です。
前回のgetRangeの解説でも少し触れましたが今回は値を入れるための
setValue
setValues
について解説いたします。
getRangeの記事を見ている前提でのお話になりますのでgetRangeがわからないという方は是非ご覧ください。
◆setValue()
setValue()は値を入れるために使用します。
getRangeで指定したセルにsetValueで値を指定することでその値を入れることができます。
getRangeの記事でも使用したデータを使用して解説していきます。
・範囲が一つの場合
Sheetオブジェクト.getRange("B1").setValue("マスカット")
もしくは
Sheetオブジェクト.getRange(1, 2).setValue("マスカット")
上記は同じセルを指定しております。
setValueに入れた値をセルに入れますので実行するとデータが以下になります。
B1セルの値がマスカットになりました。
値だけではなく式もセットできます。
Sheetオブジェクト.getRange("B1").setValue("=A1")
もしくは
Sheetオブジェクト.getRange(1, 2).setValue("=A1")
と書くことで
B1の値が=A1という式に変わりました。
もちろんSUM等の関数も使用できます。
・範囲が複数の場合
getRangeでも少し触れた内容ですがもう一度記述させていただきます。
Sheetオブジェクト.getRange(1, 2, 3).setValue("マスカット")
B1-B3までの範囲を指定してsetValueを行います。
すると範囲全てに値が入ります。
B1-B3全てに”マスカット”がセットされました。
◆setValues()
setValuesは複数の値を指定した際に別々に値をセットすることができます。
そのため、セットする値は以下のように配列データとなります。
Sheetオブジェクト.getRange(範囲).setValues(配列)
注意しなければならないのが、この配列データは必ず二次元配列であるということです。
そのため例えば、A1-A3のデータであっても
var array = [ [ A1 , A2 , A3 ] ];
A1-C1のデータの場合
var array = [ [ A1 ] , [ B1 ] , [ C1 ] ];
のようになります。
例の表でA1-B3を指定して値を上書きしてみましょう
var array = [ [ '赤', '青' ], [ '黄', '緑' ], [ '紫', '桃' ] ];
console.log(sheet.getRange(1,1,3,2).setValues(array))
わかりやすいように配列データは色名にしました。
こちらを実行してみましょう。すると
このようにセットされます。
・配列データと指定した範囲のサイズが違う場合
セットしたい配列データと指定範囲のサイズが違う場合どのようになるのか見てみましょう。
範囲をA1-A3にし、同様の配列をsetValuesしてみましょう。
var array = [ [ '赤', '青' ], [ '黄', '緑' ], [ '紫', '桃' ] ];
console.log(sheet.getRange(1,1,3,1).setValues(array))
実行するとエラーが起こりました。
指定範囲とデータのサイズが違うとダメだということがわかりましたね。
ではA1-C3の範囲をとり、配列より大きい範囲を取ってみました
sheet.getRange(1,1,3,1).setValues(array)
実行しても同様のエラーが起こりました。
結果、配列のサイズと同じでないといけないことがわかりました。
・範囲指定ではない場合
仮に範囲指定ではない場合にもsetValuesは使用可能ですが、その場合でも二次元配列でないといけません。
つまり例の表を利用してA1だけに値を入れたい場合でも
var array = [ ['マスカット'] ];
console.log(sheet.getRange("A1").setValues(array))
と二次元配列であればsetValuesを使用することができます。
実行すると以下のようになります。
セットしたい値のサイズが可変的である場合は最初からsetValuesで配列を指定してあげた方が良いかもしれませんね。
躓きやすいポイントになっていますので注意しましょう。
setValue・setValuesについて解説させていただきました。
データの型とサイズを意識しながら組まないと間違えることが多いので気をつけましょう。
エクスチュアでは様々な企業様の基本的な悩みから高度な悩みまで丁寧にお手伝いいたします。
是非お気軽にお問合せください。