如何从单元格而不是值中获取公式?

时间:2014-10-23 06:20:36

标签: google-sheets google-sheets-formula

如何从单元格中获取字面值(公式)而不是结果值?

所需的示例:

  • A2:“Foo”
  • B3:“= A2” - 因此显示“Foo”
  • C3:“= CELL(”公式“,B3)”显示“= A2”

当然,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()找到该行。

5 个答案:

答案 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

显示公式...... enter image description here

以下是它呈现的方式...... enter image description here

注意:有时需要花一点时间来加载公式,在此期间您会​​收到某种错误,说“#34;数据加载......"什么的。

另请注意:我不知道为什么会这样,因为formula不是google工作表的列出函数,但我一直在我的电子表格中使用它。也许尝试这个想法的想法来自Excel或其他东西,我不记得。

答案 4 :(得分:-3)

使用此:function =FORMULATEXT("cell")