【GAS GoogleAppsScript | スプレッドシート】セルに数式を入力する

スポンサーリンク

セルに数式を入力する

これまで、GASでスプレッドシートを操作するための、SpreadsheetAppクラスとその配下のSpreadsheetクラスそしてSheetクラス・Rangeクラスについて紹介しました。

今回は、引き続きRangeクラスのメソッドの紹介をします。

セルに数式を入力する、次の4つのメソッドです。

  1. setFormulaメソッド
  2. setFormulaR1C1メソッド
  3. setFormulasメソッド
  4. setFormulasR1C1メソッド

4つありますが、A1形式かR1C1形式かと、引数が単体か配列かで分かれています。

A1形式・R1C1形式

A1形式は、お馴染みのセルアドレスの表記方法ですね。「A1」とか「B2:F4」などと、アルファベットで列番号を、数字で行番号を表す方法です。

R1C1形式は、馴染みの無い方も多いかもしれませんが、「R[1]C[2]」とか「RC[-1]」とかいうように、現在対象となっているセルからの相対的な位置を行方向をRに続く数値で、列方向をCに続く数値で表す形式です。

例えば次の図で、現在対象となっているセルを「基準セル(C5)」とすると。A3セルを参照するためには、2行戻る(マイナス方向)、2列戻る(マイナス方向)に進むと到達出来ますね。

使い方

それでは次のサンプルを使って、GASで数式を入力していきましょう!

サンプル

setFormulaメソッド

構文

Rangeオブジェクト.setFormula(A1形式の数式)

B5セルに、数量の合計を出す「=SUM(B2:B4)」の数式を入力するコードです。

function test(){
  
  // 数式を入力するセルを取得する
  var range = SpreadsheetApp.getActiveSheet().getRange("B5")
  
  // セルに数式を入力する
  range.setFormula("SUM(B2:B4)")

}

実行すると、次のように数式が入力されます。

setFormulaR1C1メソッド

構文

Rangeオブジェクト.setFormulaR1C1(R1C1形式の数式)

B5セルに、数量の合計を出す「=SUM(B2:B4)」の数式を入力するコードです。

数式をR1C1形式で入力します。

function test(){
  
  // 数式を入力するセルを取得する
  var range = SpreadsheetApp.getActiveSheet().getRange("B5")
  
  // セルに数式(R1C1形式)を入力する
  range.setFormula("SUM(R[-3]C:R[-1]C)")

}

実行すると、次のように数式が入力されます。R1C1形式で入力しても、シート上はA1形式で表示されます。

setFormulasメソッド

構文

Rangeオブジェクト.setFormulas(A1形式の数式の配列)

「D2:D4」に、金額を計算する「B2*C2,B3*C3,B4*C4」の数式を入力するコードです。

function test(){
  
  // 数式を入力するセル範囲を取得する
  var range = SpreadsheetApp.getActiveSheet().getRange("D2:D4")
  
  // セルに数式を入力する
  range.setFormulas([
          ["=B2*C2"],
          ["=B3*C3"],
          ["=B4*C4"]
  ])
}

実行すると、次のようにD2:D4の範囲に数式が入力されます。

※引数の配列は2次元配列で指定する必要があるので、注意してください。


setFormulasR1C1メソッド

構文

Rangeオブジェクト.setFormulasR1C1(R1C1形式の数式の配列)

「B5:D5」に、金額を計算する「"SUM(R[-3]C:R[-1]C)"」の数式を入力するコードです。

function test(){
  
  // 数式を入力するセル範囲を取得する
  var range = SpreadsheetApp.getActiveSheet().getRange("B5:D5")
  
  // セルに数式(R1C1形式)を入力する
  range.setFormulasR1C1([[
          "SUM(R[-3]C:R[-1]C)",
          "SUM(R[-3]C:R[-1]C)",
          "SUM(R[-3]C:R[-1]C)"
  ]])
}

実行すると、次のようにB5:D5の範囲に数式が入力されます。R1C1形式で入兎力しても実際のシートでは、A1形式で表示されます。

※引数の配列は2次元配列で指定する必要があるので、注意してください。

おまけ

setFormulasR1C1メソッドのコードでR1C1形式で入力した数式ですが、全て一緒("SUM(R[-3]C:R[-1]C)")です。

A1形式で入力すると、「=SUM(B2:B4)」「=SUM(C2:C4)」「=SUM(D2:D4)」と参照セルが変わってしまうのですが、R1C1形式では同じになります。

実はこれがR1C1形式の使い所です。この特性を活かすことでコードをシンプルにすることが可能です。

次のコードをご覧ください。

function test(){
  
  // 数式を入力するセル範囲を取得する
  var range = SpreadsheetApp.getActiveSheet().getRange("B5:D5")
  
  // セルに数式(R1C1形式)を入力する
  range.setFormulaR1C1("SUM(R[-3]C:R[-1]C)")

}

セル範囲に対して、setFormulaメソッド,setFormulaR1C1メソッドを使うと、指定の範囲全てに同じ数式が入力されます。

setFormulaR1C1メソッドを使うことで、より短くコードを記述できるようになります。

実行すると、次の結果(setFormulasR1C1メソッドと同じ結果)になります。

まとめ

セルに数式を入力するメソッドについて紹介しました!