Google Apps Script setValue(s) スプレッドシートのセルに値を入力する

Google Apps Script

こんにちは、ばばーるです。

スポンサーリンク

前回のおさらい

前回は配列と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の同じ範囲に貼り付けたんだね。

GAS
GAS

そうそう。

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

たぬきさん
たぬきさん

ああ〜。

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

GAS
GAS

具体例を紹介するね。

具体例: 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と違うけど、

何が違うの?

GAS
GAS

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に貼り付けられています。

たぬきさん
たぬきさん

「’=’で始まる場合は、数式として解釈されます。」

ってどういう意味?

GAS
GAS

ああ。

それは下のスクリプトを実行したらわかると思うよ。

まずはシート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という式が入力されて、計算結果が出力されています。

たぬきさん
たぬきさん

めっちゃ便利やん!

スプレッドシートの式が入力できるのか!!!

GAS
GAS

同様に数式を代入できるsetFormula()という関数も存在するよ。

setValue()よりsetFormula()の方がスクリプトとしては見やすいかも。

まとめ

今回はsetValue(s)について説明しました。

  • setValues: 複数セルの範囲を指定して、そのセルに2次元配列を入力する
  • setValue: 範囲の先頭の値を入力する
  • getRangeの範囲を指定すればスプレッドシート上の好きな場所に値を入力できる
  • setValueには数式も代入できる(setFormulaという関数もある)

次回はsetFormulaをご紹介します。

コメント

  1. […] Google Apps Script setValue(s) スプレッドシートのセルに値を入力する今回はsetV… […]

  2. […] Google Apps Script setValue(s) スプレッドシートのセルに値を入力する今回はsetV… Google Apps Script スポンサーリンク シェアする Twitter Facebook はてブ Pocket LINE コピー ばばーるをフォローする ばばーる Google Apps Scriptでできること […]

タイトルとURLをコピーしました