GASでスプレッドシートの指定セルから数式をR1C1形式で取得する方法

Googleスプレッドシートを自動化するとき、「セルの数式を取得して処理したい!」ってことあるよね? そんなときに役立つのが getFormulaR1C1() ばい! 今回は、これをどう活用するか、わかりやすく解説するさ。

スポンサーリンク

getFormulaR1C1()って何?

スプレッドシートのセルには、計算式が設定できるけど、それをスクリプトから取得したいときに使うメソッドが getFormulaR1C1() じゃ。普通の getFormula() との違いは、数式を R1C1表記 で取得できること。

A1表記とR1C1表記の違い

表記方法A1表記R1C1表記
B5R5C2
相対参照B2R[-3]C

R1C1行(Row)と列(Column)を数値で指定する方法 で、相対参照を使うと動的な範囲指定ができるさ。

getFormulaR1C1()の基本的な使い方

function getFormulaExample() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const cell = sheet.getRange("B5");
  const formula = cell.getFormulaR1C1();
  Logger.log(formula);
}

例えば、B5セルに =SUM(A2:A4) が入ってる場合、getFormulaR1C1() で取得すると =SUM(R[-3]C[-1]:R[-1]C[-1]) って返ってくるばい。

範囲の数式を一括取得する方法

セルが1つだけじゃなくて、複数のセル範囲の数式を一気に取得するには、 getFormulasR1C1() を使うといいち。

function getMultipleFormulas() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange("B5:C6");
  const formulas = range.getFormulasR1C1();
  Logger.log(formulas);
}

この方法を使うと、2次元配列で数式が返ってくるから、効率的に処理できるばい。

getFormulaR1C1()の応用

1. 数式を監視して変更をログに記録

function trackFormulaChanges() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange("A1:Z100");
  const formulas = range.getFormulasR1C1();
  
  formulas.forEach((row, rowIndex) => {
    row.forEach((formula, colIndex) => {
      if (formula.includes("IMPORTRANGE")) {
        Logger.log(`外部参照が R${rowIndex+1}C${colIndex+1} にあるばい: ${formula}`);
      }
    });
  });
}

2. 動的な数式を挿入

function insertDynamicFormulas() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const startRow = 5;
  const numRows = 30;
  
  const baseFormula = "=SUM(R[0]C[-3]:R[0]C[-1])";
  const formulas = Array(numRows).fill([baseFormula]);
  
  sheet.getRange(startRow, 4, numRows, 1)
       .setFormulasR1C1(formulas);
}

このスクリプトを実行すると、指定範囲のセルに動的な数式を一括設定できるっちゃ。

getFormulaR1C1()を活用するとできること

✅ 相対参照を活用したダイナミックな数式処理
✅ 範囲の数式を一括取得・設定して処理を効率化
✅ 変更監視システムを作って数式の異常をチェック

GASでスプレッドシートをもっと便利に使いたいなら、getFormulaR1C1() は覚えておくべき機能ばい!

コメント

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