从另一个单元格调用公式NOT值,并在新单元格中执行公式



我正试图找到一种方法,将B3中使用的公式(目前是一个简单的平均公式(调用到G3中并在那里使用。绿色单元格是用于测试的静态值。如果我在G3中做"=B3",我会从B3中得到值,这不是我想要的。我想要F3和H3的平均值。基本上类似于长范围、可更新的复制/粘贴或FormulaArray。如果这有道理的话。由于我将在上面实现这一点的工作表将有许多公式实例,我希望能够在一个地方更改它们,并自动进行更新,而不需要复制/粘贴。我还将调用另一个文档中的公式。所以我想要一种方法,通过这种方法,我可以将B3更改为MULTIPLY公式,它会自动将这种更改应用于G列中的单元格,当然会引用相对单元格。这可能吗?

我确实发现一个问题问了一个类似的问题:

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

但在这两个可行的解决方案中,Ruben的CELLFORMULA成功地将函数作为字符串引入(就像G5中一样(,这很接近!路易斯的做法对我根本不起作用,尽管他似乎在试图做我想做的事。我摆弄了一下,但无论我做什么都无法让它发挥作用。其他建议都不起作用。

这是我做的一张测试表,用来说明我在寻找什么:

调用公式测试表

附加:

正如我所说,鲁本的代码按照预期完美运行,路易斯表示,为了让公式在新的单元格中执行,他自己做了一些调整。但是,复制和粘贴Luiz的代码只会产生错误,尝试自己调整它是一个失败的原因,因为我最近才开始编写脚本和编码。我只是尽我所能将鲁本的原始代码与路易斯修改后的代码进行比较和对比,找出任何可能是错误的差异。类似这样的东西:

function CELLFORMULA(reference) {
var ss = SpreadsheetApp;
var sheet = ss.getActiveSheet();
var formula = ss.getActiveRange().getFormula();
var re = /cellformula((.*));/g;
var args = re.exec(formula);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
return range.getFormula();
}

似乎路易斯没有像鲁本那样喊出变量?我不确定。但这两种代码之间的根本区别似乎是:

var args = formula.match(/=w+((.*))/i);

鲁本的vs路易斯的(未更改(:

re = /cellformula((.*));/g;
args = re.exec(formula);

在我看来,re.exec(公式(是Luiz的一段代码,它应该导致执行公式,而不仅仅是将其作为字符串放在单元格中,但我肯定错了。

正如我所说,我对此并不熟悉,"(/=\w+((.((/I("one_answers"/cellformula((.(;/g"部分完全超出了我的想象。我试着搜索那个语法来更好地理解它,但没有成功。

正如我所说,我对此并不熟悉,"(/=\w+(.((/I("one_answers"/cellformula((.(;/g"部分完全超出了我的想象。我试着搜索那个语法来更好地理解它,但没有成功。

它们是正则表达式。


为了能够用另一个公式替换单元格公式,不能使用自定义函数,但可以通过可安装的编辑函数来完成。

为了简单起见,下面的代码将非常具体:如果B3上的公式被更改,那么G7上的公式将被更新。

function updateFormula(e) {
var formula = e.range.getFormulaR1C1();
if(e.range.rowStart == 3 && e.range.columnStart == 2 && formula != ""){
var sheet = e.range.getSheet();
var target = sheet.getRange('G7');
target.setFormulaR1C1(formula);
}
}

请记住创建一个可安装的编辑触发器,它调用上面的函数,如果你想从脚本编辑器中测试它,请检查如何在GAS中测试触发器函数?

最新更新