首页 > 解决方案 > 使用谷歌表格中的命名范围作为自定义公式中的变量

问题描述

不确定这是否有意义,但我走了。

我想要做的是创建一个不直接链接到单元格的公式。例如:如果我想计算像 D&D 这样的桌面游戏的携带重量,我需要公式(strengthBonus x 5)。对于我当前的尝试,我将范围(而不是单元格)strengthBonus 重命名为 MOD_STR,因此当我输入公式 =(multiply(MOD_STR,5) 时,它就像一个魅力。然后我将该范围命名为“CARRYWEIGHT”,然后在其他地方使用它。

我想做的是创建一个新变量,类似于“定义命名范围”的方式,但不是依赖于电子表格某处的变量,而是他们将从内部公式处理。例如,如果我在一个单元格中键入 =carryweight,它将在该单元格中运行方程式 =MULTIPLY(MOD_STR,5) 并输出答案。我对代码一无所知,但刚刚被指向教程的方向,但我也在这里寻求帮助。

我试过的代码是

function CARRYWEIGHT(MOD_STR){
return MOD_STR*2}

还有别的东西,我不记得是什么,但我至少在电子表格中接受了它。当我输入它时,我收到一个错误,指出结果不是数字。

我不知道从这里去哪里。

提前感谢您的帮助。

标签: google-apps-scriptgoogle-sheets

解决方案


  • 表格公式和 Apps Script 之间的区别在于,在 Apps Script 中,您需要检索与命名范围名称对应的范围的值
  • 您不能简单地将范围名称(这是一个字符串!)与数字相乘

以下是如何按名称检索范围并使用其中存储的值进行计算的示例:

function CARRYWEIGHT(MOD_STR){
  // retrieve all named ranges in the spreadsheet
  var namedRanges = SpreadsheetApp.getActive().getNamedRanges();
  //loop through all the results
  for (var i = 0; i < namedRanges.length; i++){
    var range = namedRanges[i];
    //if the range with the name equal to the value of MOD_STR is found, get the cell content of this range
    if(range.getName()==MOD_STR){
      var value = range.getRange().getValue();
      // perform the calculation with the cell content of the named range
      return value*2;
    }  
  }
}

从单元格中调用函数 as =CARRYWEIGHT("paste here the name of the range of interest"),不要忘记引号(除非它是单元格引用)!

我希望这可以帮助您入门,为了进一步了解,请参阅以下参考资料。

参考


推荐阅读