セルに数式を入力する
これまで、GASでスプレッドシートを操作するための、SpreadsheetAppクラスとその配下のSpreadsheetクラスそしてSheetクラス・Rangeクラスについて紹介しました。
今回は、引き続きRangeクラスのメソッドの紹介をします。
セルに数式を入力する、次の4つのメソッドです。
- setFormulaメソッド
- setFormulaR1C1メソッド
- setFormulasメソッド
- 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メソッド
B5セルに、数量の合計を出す「=SUM(B2:B4)」の数式を入力するコードです。
function test(){
// 数式を入力するセルを取得する
var range = SpreadsheetApp.getActiveSheet().getRange("B5")
// セルに数式を入力する
range.setFormula("SUM(B2:B4)")
}
実行すると、次のように数式が入力されます。
setFormulaR1C1メソッド
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メソッド
「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メソッド
構文
「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メソッドと同じ結果)になります。
まとめ
セルに数式を入力するメソッドについて紹介しました!
コメント