如何从单元格中获取字面值(公式)而不是结果值?
所需的示例:
当然,CELL()不支持“公式”参数,仅用于演示意图。我查看了功能列表,没有任何内容跳出来。
使用案例:
我想引用另一行,并根据该引用从行中获取其他单元格。放置显式行号将不起作用(例如B3 =“2”),因为在修改行时它不会自动更正。具体来说,我希望一行中的多个列相对于另一行中的列,并且能够在一个位置更改相对行,而无需编辑每个列。
通常,要相对于另一行创建一行,您可以将列值设置为:“= A2 + 5”和“= B2 + 10”。这意味着A列是“相对行值+5”而B列是“相对行值+ 10”。如果要更改相对行(例如,更改为第56行),则需要将每个列更改为“= A56 + 5”和“= B56 + 10”。如何通过编辑一个字段来实现这一目标?
对于一个实际示例,考虑一个作为任务列表的工作表,并且为了计算结束日期,每个工作表可能被标记为“跟随”另一个,但您希望能够更改参考任务并支持任务之间的N:1关系。
[更新]
实际上,我确实有针对特定用例的解决方案。但我仍然对最初的问题感到好奇:可以访问单元格中值后面的公式。
解决方案1: - A2:“= ROW()” - B2:“Foo” - C3:“= A2”显示“2”并自动调整以在添加/删除行时保持参考
解决方案2:
另一个解决方案是添加一个唯一的“id”列并按id存储引用,然后使用LOOKUP()找到该行。
答案 0 :(得分:11)
使用getFormula()
或getFormulaR1C1()
方法获取单元格的公式。
示例适用于https://webapps.stackexchange.com/a/92156/88163
以下自定义函数将返回引用单元格的公式,但如果引用无效,则会返回错误消息。
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
答案 1 :(得分:2)
我遇到了同样的问题,并尝试使用鲁本创建的公式,但是有一个局限性。我不能在另一个公式中使用这些公式(我试图制作一个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();
}
答案 2 :(得分:1)
编辑:这个答案是针对问题描述中的用例,要求只使用本机函数(没有脚本)。
根据AdamL对问题的评论,答案是你无法从单元格中获取公式(而不是值)。
但是,对于我试图解决的实际用例,= ROW(A42)可用于获取对特定行的引用,该行将随行更改自动更新。
答案 3 :(得分:-3)
尝试使用=formula(2,3)
坐标为(row#,col#)
Google表格示例:https://docs.google.com/spreadsheets/d/1A1l0qdnNSHlJB-5DARGKDeIsbuCCLGuoYWm8sR29UTA/edit?usp=sharing
注意:有时需要花一点时间来加载公式,在此期间您会收到某种错误,说“#34;数据加载......"什么的。
另请注意:我不知道为什么会这样,因为formula
不是google工作表的列出函数,但我一直在我的电子表格中使用它。也许尝试这个想法的想法来自Excel或其他东西,我不记得。
答案 4 :(得分:-3)
使用此:function =FORMULATEXT("cell")