我需要帮助将函数应用于整个列。我知道拖动右下方的手柄会复制它,但是我拖动/突出显示。但我希望它适用于整个专栏。我也知道ARRAYFORMULA()函数。但它只能用于基本的公式和功能(至少据我所知)。那么是否有一些函数(即APPLYALL(范围,函数))允许我在列中应用公式。还是由我来做?是否有可能为ARRAYFORMULA函数定制一个函数并让它以这种方式工作?感谢所有帮助。
这是一段代码。参数都是字符串,它由E2中的单元格调用。因此,对于E2,它看起来像开始(C2,D2)"对于E3来说,它看起来像开始(C3,D3)和#34;等等。
function toStart(model,type) {
if (model == "E340") {return E340Price(type)} //Calls same function add OR op
else if (model == "E342") {return E340Price(type)} //"" ""
else if (model == "E350") {return E350Price(type)}
else if (model == "T644") {return T644Price(type)}
else if (model == "C532") {return C532Price(type)}
}
function E340Price (type){
if (type == "Toner") {return 89.00;} //Use global constants for prices?
else if (type == "Photoconductor") {return 65.00;}
else if (type == "Toner/Photoconductor") {return 144.00;}
}
答案 0 :(得分:2)
您可以更快更有效地复制公式。 例如:
var lastRow = ThisSheet.getLastRow();
ThisSheet.getRange("E2").setFormula("=toStart(C2,D2)");
ThisSheet.getRange("E2").copyTo(ThisSheet.getRange("E2:E"+lastRow));
然后,公式将根据行号自动缩放。我希望你的问题能够得到解决。
编辑:getLastrow应该是getLastRow()而setFormula实际上是setFormula()而不是setFormula =
答案 1 :(得分:1)
您可以启用范围功能。诀窍是检查你的参数是否是一个数组,然后你只需遍历所有单元格。 为了简化,我使用一个只有一个参数的函数myFunctionCanRange(x)。 实际计算数据的函数是myFunction(x)。
代码片段:
function myFunctionCanRange(x) {
if ( Array.isArray(x)) {
var result = [];
for( var i=0; i < x.length, i++) {
var temp = [];
for ( var j=0; j < x[i].length, j++) {
temp.push(myFunction(x[i][j]);
}
result.push(temp)
}
return result;
}
else
return myFunction(x);
}
现在您可以通过两种方式调用它:
= myFunctionCanRange(C3)
但也是:
= ARRAYFORMULA(myFunctionCanRange(C3:C))