こんにちは、ばばーるです。
前回のおさらい
前回は配列とgetValue(s)についてご紹介しました。
- [ ]は配列
- 計算はスプレッドシート上ではなく、出来るだけ配列を使ってプログラム内で処理する。
- Google Apps Scriptは6分以上動かない
- getValue(s)は0から数えはじめる
- getRangeは1から数えはじめる
今回はsetValue(s)でスプレッドシートのセルに値を入力していきましょう。
setValues()
setValues: 複数セルの範囲を指定して、そのセルに2次元配列を入力します。
この説明だけだと分からないので、実際にgetValuesで取得したセルデータをシートに貼り付けていきましょう。
例えば、以下のようなスプレッドシートがあるとします。(シート1のセルに値は入力されていますが、シート2には何も入力されていません。)
ということでスクリプトを書いていきましょう。
function myFunction() {
const id = 'あなたのスプレッドシートid'; //1行目
const ss = SpreadsheetApp.openById(id); //2行目
const sheet1 = ss.getSheetByName('シート1'); //3行目
const a1c3 = sheet1.getRange(1, 1, 3, 3).getValues(); //4行目
const sheet2 = ss.getSheetByName('シート2'); //5行目
const range2 = sheet2.getRange(1, 1, 3, 3).setValues(a1c3); //6行目
}
1行目: 自分の使用するスプレッドシートのidを変数idに代入します
2行目: スプレッドシートをOpenById()で開きます
3行目: シート1を指定します
4行目: getRangeでA1~C3のセル範囲を指定して、getValues()で値を取得します
5行目: シート2を指定します
6行目: getRangeでシート2のA1~C3のセル範囲を指定して、setValues()で値をセルに入力します
結果はこんな感じ。


コピペだな。
シート1の値をシート2の同じ範囲に貼り付けたんだね。

そうそう。
注意しないといけないのは、getValues()の範囲と同じ範囲をsetValues()で指定しないとエラーになる点だね。

ああ〜。
(ちょっとイメージできてない..)

具体例を紹介するね。
具体例: setValuesで指定の場所に貼り付ける
先ほどの例は同じ範囲に同じ値を貼り付けただけだったので、具体的なイメージが湧くように
シート1のA列をシート2のC列に貼り付けて見ましょう。
まずはシート2のデータを消します。
スクリプトを書いていきましょう。
function myFunction() {
const id = 'あなたのスプレッドシートid'; //1行目
const ss = SpreadsheetApp.openById(id); //2行目
const sheet1 = ss.getSheetByName('シート1'); //3行目
const a_col = sheet1.getRange(1, 1, 3, 1).getValues(); //4行目
const sheet2 = ss.getSheetByName('シート2'); //5行目
const range2 = sheet2.getRange(1, 3, 3, 1).setValues(a_col); //6行目
}
ほぼ先ほどのスクリプトと一緒で、変更したのは4と6行目です。
4行目: getRangeでA1~A3のセル範囲を指定して、getValues()で値を取得します
6行目: getRangeでC1~C3のセル範囲を指定して、setValues()で値を取得します
結果としてA1~A3のセルの値をC1~C3のセル範囲に貼り付けます。


便利〜。
setValue
setValue: 範囲の先頭の値を入力します。値は、数値、文字列、ブール値、または日付。 ‘=’で始まる場合は、数式として解釈されます。

なんか説明がsetValuesと違うけど、
何が違うの?

setValueは取得した範囲の先頭の値しか貼り付けられないよ
先ほどのスクリプトの6行目のsetValuesをsetValueに変更して、実行して見てください。
function myFunction() {
const id = 'あなたのスプレッドシートid'; //1行目
const ss = SpreadsheetApp.openById(id); //2行目
const sheet1 = ss.getSheetByName('シート1'); //3行目
const a_col = sheet1.getRange(1, 1, 3, 1).getValues(); //4行目
const sheet2 = ss.getSheetByName('シート2'); //5行目
const range2 = sheet2.getRange(1, 3, 3, 1).setValue(a_col); //6行目
}
A1がC1~C3のセルに入力されます。これは4行目のgetValues()でA1,A2,A3を読み込んでいるのですが、setValueによって、A1の値だけが、指定されたセルの範囲C1~C3に貼り付けられています。


「’=’で始まる場合は、数式として解釈されます。」
ってどういう意味?

ああ。
それは下のスクリプトを実行したらわかると思うよ。
まずはシート2のA1セルに2を入力して、

以下のような、setValueに’=A1*2’を代入したスクリプトを実行しましょう。
function myFunction() {
const id = 'あなたのスプレッドシートid'; //1行目
const ss = SpreadsheetApp.openById(id); //2行目
const sheet2 = ss.getSheetByName('シート2'); //3行目
const range2 = sheet2.getRange(1, 3, 3, 1).setValue('=A1*2'); //4行目
}
そうするとC1~C3のセルにそれぞれA1*2、A2*2、A3*2という式が入力されて、計算結果が出力されています。


めっちゃ便利やん!
スプレッドシートの式が入力できるのか!!!

同様に数式を代入できるsetFormula()という関数も存在するよ。
setValue()よりsetFormula()の方がスクリプトとしては見やすいかも。
まとめ
今回はsetValue(s)について説明しました。
- setValues: 複数セルの範囲を指定して、そのセルに2次元配列を入力する
- setValue: 範囲の先頭の値を入力する
- getRangeの範囲を指定すればスプレッドシート上の好きな場所に値を入力できる
- setValueには数式も代入できる(setFormulaという関数もある)
次回はsetFormulaをご紹介します。
コメント
[…] Google Apps Script setValue(s) スプレッドシートのセルに値を入力する今回はsetV… […]
[…] Google Apps Script setValue(s) スプレッドシートのセルに値を入力する今回はsetV… Google Apps Script スポンサーリンク シェアする Twitter Facebook はてブ Pocket LINE コピー ばばーるをフォローする ばばーる Google Apps Scriptでできること […]