結果値の代わりにセルからリテラル値(数式)を取得するにはどうすればよいですか?
必要な例:
もちろん、CELL()は「式」パラメーターをサポートしていません。これは、意図を示すためだけのものです。関数リストを確認したところ、何も飛び出していません。
使用事例:
別の行への参照を作成し、その参照に基づいて行から他のセルを取得したいと考えています。行が変更されたときに自動修正されないため、明示的な行番号を指定しても機能しません(例:B3 = "2")。具体的には、ある行の複数の列を別の行の列に対して相対的にし、それらの各列を編集する必要なく、1つの場所で相対行を変更できるようにしたいと考えています。
通常、ある行を別の行に相対的にするには、「= A2 + 5」および「= B2 + 10」のような列値を配置します。つまり、A列は「相対行値+5」、B列は「相対行値+ 10」です。相対行を(たとえば、行56に)変更する場合は、各列を "= A56 + 5"および "= B56 + 10"に変更する必要があります。 1つのフィールドだけを編集してこれを行う方法は?
実際の例として、タスクのリストであるシートを考えてください。各シートは、終了日を計算するために別のタスクを「フォローしている」とマークされている可能性がありますが、参照タスクを変更してNをサポートできるようにしたいとします。タスク間の1つの関係。
[更新]
実際、私は特定のユースケースに対する解決策を持っています。しかし、私はまだ元の質問について興味があります。セルの値の背後にある数式にアクセスすることです。
解決策1:-A2: "= ROW()"-B2: "Foo"-C3: "= A2"は "2"を表示し、行が追加/削除されたときに参照を維持するように自動調整します
解決策2:
別の解決策は、一意の「ID」列を追加し、IDによって参照を格納し、LOOKUP()を使用して行を見つけることです。
編集:この回答は、問題の説明のユースケース用であり、ネイティブ関数のみで実行する必要があります(スクリプトなし)
AdamLからの質問へのコメントに基づくと、答えは(値の代わりに)セルから数式を取得できないことです。
ただし、私が解決しようとしていた実際の使用例では、= ROW(A42)を使用して、行の変更で自動的に更新される特定の行への参照を取得できます。
getFormula()
またはgetFormulaR1C1()
メソッドを使用して、セルの数式を取得します。
https://webapps.stackexchange.com/a/92156/8816 から変更された例
次のカスタム関数は、参照先のセルの数式を返しますが、参照が無効な場合は、エラーメッセージを返します。
_function CELLFORMULA(reference) {
var ss = SpreadsheetApp;
var sheet = ss.getActiveSheet();
var formula = ss.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
return range.getFormula();
}
_
上記のカスタム関数の使用例
A2:FOO
B3:数式_=A2
_、値FOO
C3:式=CELLFORMULA(B3)
、値_=A2
_
私は同じ問題を抱えており、ルベンが作成した式を使用しようとしましたが、制限がありました。これらの数式を別の数式の中で使用することはできませんでした(mid()を作成しようとしました)。したがって、機能する別のアプローチを作りました:
function CELLFORMULA(reference) {
var ss = SpreadsheetApp;
var sheet = ss.getActiveSheet();
var formula = ss.getActiveRange().getFormula();
re = /cellformula\((.*)\);/g;
args = re.exec(formula);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args + ' is not a valid range');
}
return range.getFormula();
}
これを使用してください:function =FORMULATEXT("cell")