Google Apps Script(GAS)でスプレッドシートの数式を扱うときに役立つのが getFormulasR1C1()
メソッドばい。このメソッドを使うと、セル範囲内の数式を R1C1表記 で取得できるっちゃね。今回は、その基礎から応用までをわかりやすく解説するばい。
R1C1表記とは?
R1C1表記は、行(Row)と列(Column)の位置を基準にして、相対的にセルを参照する書き方ばい。たとえば、
R[3]C[-1]
→ 現在のセルから3行下、1列左R1C1
→ 絶対参照(A1セル)
この方式の最大のメリットは、数式をコピーしても参照がズレにくいことさ。
A1表記(A1
みたいな書き方)と違って、数式をコードで扱うときに便利ばい。
getFormulasR1C1() メソッドの使い方
基本構文
Range.getFormulasR1C1()
戻り値
getFormulasR1C1()
は、2次元配列(String[][]) を返すっちゃ。
- 数式があるセル → R1C1表記の数式
- 数式がないセル → 空文字(””)
getFormulasR1C1() を実装してみよう!
基本の取得方法
function getFormulasExample() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ');
const range = sheet.getRange('B2:D10');
const formulas = range.getFormulasR1C1();
formulas.forEach((row, rowIndex) => {
row.forEach((formula, colIndex) => {
Logger.log(`Cell R${rowIndex+2}C${colIndex+2}: ${formula}`);
});
});
}
応用例:数式の監査
財務データの数式をチェックするスクリプトじゃ。
function auditFinancialFormulas() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('月次報告');
const range = sheet.getRange('C5:F20');
const formulas = range.getFormulasR1C1();
formulas.forEach((row, r) => {
row.forEach((formula, c) => {
if (formula) {
Logger.log(`数式 @ R${r+5}C${c+3}: ${formula}`);
}
});
});
}
getFormulasR1C1() を活用するテクニック
① 大量データの処理を効率化
const range = sheet.getDataRange();
const formulas = range.getFormulasR1C1();
データ範囲を動的に取得して、一括で処理するばい。
② getFormulas() との違い
メソッド | 表記方式 | 戻り値型 | 空セル処理 | 最適用途 |
---|---|---|---|---|
getFormulas() | A1 | String[][] | 空文字 | 見やすさ重視 |
getFormulasR1C1() | R1C1 | String[][] | 空文字 | プログラム処理 |
③ 数式バージョン管理
class FormulaVersionControl {
constructor(sheetName, rangeSpec) {
this.sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
this.range = this.sheet.getRange(rangeSpec);
this.versionHistory = [];
}
snapshot() {
this.versionHistory.push({
timestamp: new Date(),
formulas: this.range.getFormulasR1C1()
});
}
}
スプレッドシートの数式変更を記録するシステムばい。
まとめ
getFormulasR1C1()
は、スプレッドシートの数式をプログラムで扱うときにめちゃくちゃ便利なメソッドばい。特に、大量データの管理や監査、動的な数式処理をするなら、絶対に覚えておくべき機能っちゃ!
コメント