セルの数式を取得する | getFormula()【GAS】

たけだ

GASを使ってスプレッドシートのセル内の数式を取得する方法をご紹介します。

💡この記事でわかること
  • getFormulas関数を使って特定範囲のセルの数式(A1表記)を取得する方法
  • getFormulasR1C1関数を使って特定範囲のセルの数式(R1C1表記)を取得する方法

getFormulas()

指定範囲のセルの数式(A1表記)を取得します。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

// 指定の範囲の数式を取得する
const formulas = sheet.getRange(1, 1, 2, 5).getFormulas()
console.log(formulas)

実行結果

[ [ '=ROW()', '=A1+1', '=B1+1', '=C1+1', '=D1+1' ],
  [ '=A1', '=B1', '=C1', '=D1', '=E1' ] ]

公式ドキュメント

https://developers.google.com/apps-script/reference/spreadsheet/range#getformulas

戻り値

セルの数式が格納された2次元配列(A1表記)。

スプレッドシートと取得した値の比較

スプレッドシートから見た場合はこのように計算結果が表示されています。

数式表示に切り替えると、今回取得した値を確認できます。

getFormulasR1C1()

指定範囲のセルの数式(R1C1表記)を取得します。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

// 指定の範囲の数式を取得する
const formulas = sheet.getRange(1, 1, 2, 5).getFormulasR1C1()
console.log(formulas)

実行結果

[ [ '=ROW()',
    '=R[0]C[-1]+1',
    '=R[0]C[-1]+1',
    '=R[0]C[-1]+1',
    '=R[0]C[-1]+1' ],
  [ '=R[-1]C[0]',
    '=R[-1]C[0]',
    '=R[-1]C[0]',
    '=R[-1]C[0]',
    '=R[-1]C[0]' ] ]

公式ドキュメント

https://developers.google.com/apps-script/reference/spreadsheet/range#getformulasr1c1

戻り値

セルの数式が格納された2次元配列(R1C1表記)。

getRangeの使い方

getRangeを使って値を取得する範囲を指定しています。

sheet.getRange(2, 1, 3, 4) // 行, 列, 行数, 列数

範囲指定についてもっと知りたい方は、こちらを参照してください。

数式ではなく値が入っている場合に取得される値

ぴよこ

値が入っている場合に戻り値はどうなるんでしょうか?

数式ではなく値が入っている場合に取得される値は”(空文字)です

数式と値が混在ている範囲を取得する場合は、それぞれに対応した関数を使う必要があります。

そのような場合に便利な数式と値をスクリプト側で区別して自動で取得する方法を以下の記事で紹介しています。

このように一行目に値、二行目に数式が入っている場合を例に見ていきましょう。

実行結果

[ [ '', '', '', '', '' ],
  [ '=ROW()', '=B1', '=C1', '=D1', '=E1' ] ]

このように空文字が配列の一行目に返却されています。

公式ドキュメントでは「getFormulasR1C1()」で数式のないセルを取得した場合に返却される値はnullと記載がありましたが、手元の環境で確認したところ空文字であったため、このような表記にさせていただいています。

getFormula()

たけだ

配列ではなくセル単体で取得したい場合はこちらがオススメです

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

// 指定セルの数式を取得する
const formulas = sheet.getRange(1, 1).getFormula()  // A1表記
console.log(formulas)

const formulasR1C1 = sheet.getRange(1, 1).getFormulaR1C1()  // R1C1表記
console.log(formulasR1C1)

実行結果

=A2
=R[1]C[0]

公式ドキュメント

https://developers.google.com/apps-script/reference/spreadsheet/range#getformula

https://developers.google.com/apps-script/reference/spreadsheet/range#getformular1c1

ぴよこ

配列の添え字を気にする必要がないので気軽に使えますね!

戻り値

セルの数式。

まとめ

たけだ

以上、getFormulaでセルの数式を取得する方法でした。

最後まで読んでいただきありがとうございました!

今回紹介したgetFormulaは、セル内の数式を取得できる便利な関数ですが、値を取得する場合には空文字が返ってくる仕様があります。この仕様には十分注意して利用しましょう。

GASをイチから学びたい方へ

このブログでは断片的な説明になってしまっていますが、本書は幅広いGASの内容が網羅的に学べる本です。イチから学びたい方は是非読んでみてください。

すでにGASをある程度マスターした方にも辞書的に手元に置いておくと便利です。