Googleスプレッドシートでセルの値を取得するとき、getValueとgetFormulaのどちらを使うべきか迷ったことはありませんか。シート上で数式が入っているセルから、計算結果の値だけを取り出したい場合と、数式そのものを取得したい場合では、適切なメソッドが異なります。本記事では、Apps ScriptにおけるgetValueとgetFormulaの違いを詳しく解説し、それぞれの使い分け方を具体例とともに紹介します。これを読めば、セルのデータを正確に取得できるようになります。
【要点】getFormulaとgetValueの使い分けをマスターします
- getValue: セルの計算結果の値を取得します。数式が入っていても値だけを返します。
- getFormula: セルに入力されている数式文字列を取得します。値のみのセルでは空文字列を返します。
- 使い分けの基本: 値が必要ならgetValue、数式が必要ならgetFormulaを使用します。両方を取得する場合は併用します。
ADVERTISEMENT
目次
getFormulaとgetValueが返すものの違い
Apps Scriptでセルを操作するとき、まずRangeオブジェクトを取得します。そのRangeに対して、getValue()はセルの値を取得し、getFormula()はセルに入力された数式を文字列として返します。数式がないセルでは、getFormula()は空文字列を返す点が重要です。また、値がエラーの場合、getValue()はエラーオブジェクトを返すことがあります。これらの動作を理解していないと、予期しない結果を得ることになります。
例えば、セルA1に「=SUM(B1:B10)」という数式が入っていて、その計算結果が100だとします。このとき、getValue()は100を返し、getFormula()は「=SUM(B1:B10)」を文字列として返します。一方、セルA2に単に「200」と値が直接入力されている場合、getValue()は200を返し、getFormula()は空文字列を返します。この違いを把握しておくことで、スクリプトのロジックを正しく組むことができます。
具体的なスクリプトで使い分けを確認する
getValueで値を取得する手順
- スクリプトエディタを開く
スプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。エディタが開きます。 - 値を取得する関数を記述する
以下のコードを記述します。function getCellValue() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1");
var value = range.getValue();
Logger.log(value);
} - 実行してログを確認する
関数を実行し、表示メニューから「ログ」を開くと、セルA1の値が出力されています。数式が入っていても計算結果の値が取得できます。
getFormulaで数式を取得する手順
- 同様にスクリプトエディタを開く
先ほどと同じ手順でエディタを開きます。 - 数式を取得する関数を記述する
以下のコードを記述します。function getCellFormula() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1");
var formula = range.getFormula();
Logger.log(formula);
} - 実行してログを確認する
関数を実行すると、セルA1の数式が文字列として出力されます。もし値のみのセルなら空文字列が出力されます。
両方を取得してセルの状態を判定する
実際のスクリプトでは、getValueとgetFormulaを組み合わせて、セルに数式が入っているかどうかを判定することがあります。例えば、数式が入っているセルだけを対象に処理を行いたい場合です。以下のサンプルコードでは、範囲内の各セルについて、getFormulaが空でなければ数式と値をログ出力します。
function checkFormulas() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var formulas = range.getFormulas();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[0].length; j++) {
if (formulas[i][j] !== "") {
Logger.log("Cell (" + (i+1) + "," + (j+1) + ") has formula: " + formulas[i][j] + " with value: " + values[i][j]);
}
}
}
}
このように、getValues()とgetFormulas()を併用することで、範囲全体の値と数式を一度に取得できます。それぞれ二次元配列で返されるため、ループ処理で個別にアクセスできます。
よくあるトラブルと対処法
getFormulaで値のみのセルを取得すると空文字になる
数式が入っていないセルに対してgetFormulaを呼び出すと、空文字列が返されます。これをそのまま利用しようとすると、文字列結合などで予期しない結果になることがあります。対処法としては、事前にgetFormulaの戻り値を判定してから処理を行います。空文字列の場合は、数式がないものとして別の処理に切り替えます。
数式がエラーの場合のgetValue
セルにエラーが発生している数式(例えば#N/Aや#DIV/0!)がある場合、getValueはエラーオブジェクトを返します。そのままログ出力すると「NaN」や「[object Object]」と表示されることがあります。エラーを判定するには、isError()メソッドを使用するか、typeofでチェックします。また、getDisplayValue()を使うとエラーメッセージを文字列として取得できます。
以下はエラーを検出するサンプルです。function checkError() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1");
var value = range.getValue();
if (typeof value === "string" && value.indexOf("#") === 0) {
Logger.log("Error found: " + value);
} else if (value instanceof Error) {
Logger.log("Error: " + value.toString());
} else {
Logger.log("Value: " + value);
}
}
getFormulaで等号を忘れない
getFormulaで取得した数式文字列は、先頭に「=」が含まれます。その文字列を別のセルにsetFormulaで設定するときは、そのまま使用できます。ただし、手動で文字列を組み立てる場合、先頭に「=」を付け忘れないように注意してください。
ADVERTISEMENT
getFormulaとgetValueの比較
| 項目 | getValue | getFormula |
|---|---|---|
| 戻り値の型 | 数値、文字列、真偽値、日付、エラーなど | 文字列(数式がない場合は空文字列) |
| 取得対象 | セルの計算結果の値 | セルに入力された数式そのもの |
| 数式セルの例(=SUM(A1:A5)) | その合計値(例:150) | 文字列 “=SUM(A1:A5)” |
| 値のみのセル(例: 100) | 100 | 空文字列 “” |
| エラーセル(例: #N/A) | エラーオブジェクト | 数式文字列(例: “=VLOOKUP(…)”) |
| 主な用途 | 計算結果を利用する処理 | 数式の分析、バックアップ、複製 |
このように、2つのメソッドは明確に異なる役割を持っています。状況に応じて適切に使い分けることが、スクリプトの品質向上につながります。
本記事では、getValueとgetFormulaの違いと使い分けを解説しました。値を取得するだけであればgetValue、数式そのものを分析したい場合にはgetFormulaを使用します。実際のスクリプトでは、両方を組み合わせることでセルの状態をより詳細に把握できます。次のステップとして、getDisplayValueと組み合わせた応用も試してみてください。これにより、表示形式の文字列も含めてセルの情報を完全に取得できるようになります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
