Den*_*s P 15 google-sheets google-sheets-formula
如何从单元格中获取字面值(公式)而不是结果值?
所需示例:
当然,CELL()不支持"公式"参数,仅用于演示意图.我查看了功能列表,没有任何内容跳出来.
使用案例:
我想引用另一行,并根据该引用从行中获取其他单元格.放置显式行号将不起作用(例如B3 ="2"),因为在修改行时它不会自动更正.具体来说,我希望一行中的多个列相对于另一行中的列,并且能够在一个位置更改相对行,而无需编辑每个列.
通常,要相对于另一行创建一行,您可以将列值设置为:"= A2 + 5"和"= B2 + 10".这意味着A列是"相对行值+5"而B列是"相对行值+ 10".如果要更改相对行(例如,更改为第56行),则需要将每个列更改为"= A56 + 5"和"= B56 + 10".如何通过编辑一个字段来实现这一目标?
对于一个实际示例,考虑一个作为任务列表的工作表,并且为了计算结束日期,每个工作表可能被标记为"跟随"另一个,但您希望能够更改参考任务并支持N:任务之间的关系.
[更新]
实际上,我确实有一个特定用例的解决方案.但我仍然对最初的问题感到好奇:获取单元格中值后面的公式.
解决方案1: - A2:"= ROW()" - B2:"Foo" - C3:"= A2"显示"2"并自动调整以在添加/删除行时保持参考
解决方案2:
另一种解决方案是添加唯一的"id"列并按id存储引用,然后使用LOOKUP()查找行.
Rub*_*bén 12
使用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();
}
Run Code Online (Sandbox Code Playgroud)
使用上述自定义函数的示例
A2:FOO
B3:式=A2,值FOO
C3:式=CELLFORMULA(B3),值=A2
编辑:这个答案适用于问题描述中的用例,要求仅使用本机函数(无脚本)来执行此操作。
根据 AdamL 对问题的评论,答案是您无法从单元格中获取公式(而不是值)。
但是,对于我试图解决的实际用例,=ROW(A42) 可用于获取对特定行的引用,该行将随着行的更改自动更新。
| 归档时间: |
|
| 查看次数: |
23364 次 |
| 最近记录: |