1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS】getFormulaとgetFormulasの違いとは?セルの数式を正しく取得する方法

【GAS】getFormulaとgetFormulasの違いとは?セルの数式を正しく取得する方法

【GAS】getFormulaとgetFormulasの違いとは?セルの数式を正しく取得する方法

Google Apps Script (GAS)でスプレッドシートのセルを操作する際、「計算結果の値」ではなく「入力されている数式そのもの」を取得したい場面は頻繁にあります。例えば、シート内の数式を監査したり、一括でバックアップしたりする場合です。

そのために使うのがgetFormula()getFormulas()ですが、getValue()との違いや、複数セルを扱う際の注意点を理解しておくことが重要です。

この記事では、これらのメソッドの正しい使い分けと、GASのパフォーマンスを意識した実践的なテクニックを解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getValue() vs getFormula(): 根本的な違い

まず最初に、最も重要な違いを理解しましょう。

  • getValue(): セルに表示されている計算結果の値を取得します。セルA1=1+2と入力されていれば、3という数値が返ります。
  • getFormula(): セルに入力されている数式の文字列そのものを取得します。セルA1=1+2と入力されていれば、"=1+2"という文字列が返ります。
    • 重要: もしセルに数式が入っていない場合、getFormula()空文字 ("") を返します。

目的に応じて、この2つを明確に使い分ける必要があります。

getFormula()の罠:複数範囲には使えない

getFormula()単一セル専用のメソッドです。複数セルの範囲(例: "A1:B2")に対して使用すると、左上隅のセルの数式しか返さないので注意してください。

// A1に"=SUM(C1:C2)"、B1に"=SUM(D1:D2)"が入っているとする
const range = SpreadsheetApp.getActiveSheet().getRange("A1:B1");
// A1の数式しか返ってこない
const formula = range.getFormula(); 
console.log(formula); // "=SUM(C1:C2)"

getFormulas()による高速な一括取得

複数のセルの数式を正しく、かつ効率的に取得するための解決策が**getFormulas()**(複数形)です。

このメソッドは、指定した範囲の全セルの数式を二次元配列 (String[][]) として、たった1回のAPI呼び出しで取得します。数式が入っていないセルに対応する配列要素は、空文字 ("") になります。

function fetchAllFormulas() {
  const range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
  const formulas = range.getFormulas();
  
  // 例: [["=SUM(C1:C2)", "=SUM(D1:D2)"], ["", "=A1*1.1"]]
  console.log(formulas); 
}

ループでgetFormula()を何度も呼び出すのに比べて、パフォーマンスが劇的に向上します。

A1表記 vs R1C1表記

GASには、数式を行と列の相対位置で示す「R1C1表記」で取得するメソッドもあります。

メソッド名対象範囲表記法戻り値の型主な用途
getFormula()単一セルA1表記String特定1セルの数式を確認したい時
getFormulas()複数セルA1表記String[][]範囲内の数式を見たままの形で一括取得したい時
getFormulaR1C1()単一セルR1C1表記String1セルの数式を相対参照で取得したい時
getFormulasR1C1()複数セルR1C1表記String[][]範囲内の数式を相対参照で一括取得し、再利用したい時

R1C1表記(例: =SUM(R[0]C[-2]:R[0]C[-1]))は、数式を別の場所にコピー&ペーストするような処理をプログラムで実装する際に非常に強力です。

実践的コード例

1. シート全体の数式を別シートにバックアップ

getFormulas()setFormulas()を組み合わせることで、数式のバックアップと復元が簡単に行えます。読み書き両方の一括処理がポイントです。

function backupAllFormulas() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getActiveSheet();
  const sourceRange = sourceSheet.getDataRange();
  
  // 範囲の数式を一括取得
  const formulas = sourceRange.getFormulas();

  let backupSheet = ss.getSheetByName(sourceSheet.getName() + '_数式バックアップ');
  if (!backupSheet) {
    backupSheet = ss.insertSheet(sourceSheet.getName() + '_数式バックアップ');
  }
  backupSheet.clear();
  
  // 取得した数式をバックアップシートに一括設定
  backupSheet.getRange(1, 1, formulas.length, formulas[0].length).setFormulas(formulas);
  
  SpreadsheetApp.getUi().alert('数式のバックアップが完了しました。');
}

2. 特定の関数(例: VLOOKUP)が使われているセルを特定

シート内でVLOOKUP関数が使われているセルをリストアップし、シートの監査に役立てます。

function findCellsWithSpecificFunction() {
  const FUNCTION_NAME = "VLOOKUP";
  
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const formulas = range.getFormulas();
  
  const foundCells = [];

  formulas.forEach((row, r) => {
    row.forEach((formula, c) => {
      // toUpperCase()で大文字小文字を区別しないようにする
      if (formula.toUpperCase().includes(FUNCTION_NAME)) {
        foundCells.push(range.getCell(r + 1, c + 1).getA1Notation());
      }
    });
  });
  
  if (foundCells.length > 0) {
    console.log(`${FUNCTION_NAME}関数が使われているセル: ${foundCells.join(', ')}`);
  } else {
    console.log(`${FUNCTION_NAME}関数が使われているセルは見つかりませんでした。`);
  }
}

まとめ

スプレッドシートの数式をGASで扱う際の要点は以下の通りです。

  • 計算結果が欲しいなら getValue()数式の文字列が欲しいなら getFormula() を使う。
  • 単一セルの数式には getFormula() を使う。
  • 複数セルの数式には、パフォーマンスのために必ず getFormulas() を使って一括取得する。

これらのメソッドを適切に使い分けることで、シートの分析、監査、バックアップといった高度な自動化を効率的に実装できます。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Class Range | Apps Script | Google for Developers

Class Range | Apps Script | Google for Developers

関連記事

【GASスプレッドシート】getValues()で複数セルデータを高速一括取得・SEO最適化

【GASスプレッドシート】getValues()で複数セルデータを高速一括取得・SEO最適化

Google Apps Script (GAS) を用いてスプレッドシートのデータを操作する際、複数セルの値(データ)を効率的かつ高速に取得することは、自動化スクリプトのパフォーマンスと信頼性を決定づける最も重要な要素の一つです。getValues()メソッドは、このニーズに応えるための基本的ながら極めて強力な機能です。

本記事では、GASのRange.getValues()メソッドを徹底解説します。複数セルのデータを二次元配列として一括取得する基本から、getValue()getDisplayValues()との明確な違い、各データ型(数値、文字列、日付、真偽値)の挙動、さらには大規模データ処理のためのパフォーマンス最適化(チャンク処理)、そしてよくある「ハマりどころ」と対策まで、具体的なコード例を交えて分かりやすく紹介します。

【GASスプレッドシート】getVerticalAlignments()で複数セルの垂直配置を一括取得・SEO最適化

【GASスプレッドシート】getVerticalAlignments()で複数セルの垂直配置を一括取得・SEO最適化

Google Apps Script (GAS) を用いてスプレッドシートのレイアウトを調整する際、特に大規模なデータや複数シートを扱う場合には、複数セルの「垂直配置」(上寄せ、中央揃え、下寄せ)を効率的に管理することが、データの視認性やデザインの整合性を保つ上で非常に重要になります。getVerticalAlignments()メソッドは、このニーズに応える強力な一括取得機能を提供します。

本記事では、GASのRange.getVerticalAlignments()メソッドを徹底解説します。複数セルの垂直配置を二次元配列として一括取得する基本から、getVerticalAlignment()との違い、setVerticalAlignments() / setVerticalAlignment()による垂直配置の効率的な設定方法、さらにはコンテンツ長や条件に応じた自動配置調整、変更履歴の記録、パフォーマンス最適化といった実践的な応用例まで、具体的なコードを交えて分かりやすく紹介します。