我正在尝试将这些数字连续添加到“总计”列中。如果行中值的总和为0,则该行中单元格的“总计”列将显示不同的值。这意味着我不能使用已经提供的= SUM方法。
如果我在单个列中添加数字,我的代码就可以正常运行,但如果我尝试将数字添加到多个列的单行中,则无效。
例如,如果我有一个包含4行的列,并且每个列的值为(1,2,3,4),则我创建的函数将导致“10”。但是,如果我有一行4个数字,例如A列第1行= 1,B列第1行= 2,C1 = 3,D1 = 4,那么结果将是1,2,3,4而不是10
我做错了什么?
function totalsFunction (customVal, rowValues) {
var sumTotal = 0;
for(var i = 0; i < rowValues.length; i++) {
sumTotal += parseInt(rowValues[i]);
}
if(sumTotal == 0) {
return customVal;
}
else{
return sumTotal;
}
}
答案 0 :(得分:1)
你仍然可以使用sum,包含在if语句中。像
这样的东西=if(sum(B2:E2) = 0, "customValue", sum(B2:E2))
应该有效。请注意,使用MMULT时甚至可以有一个数组输出(每行总和)。
=ARRAYFORMULA(IF(MMULT(B2:E4, TRANSPOSE(COLUMN(B2:E2)^0))=0, "CUSTOM VALUE", MMULT(B2:E4, TRANSPOSE(COLUMN(B2:E2)^0)) ))
对于您编写的自定义函数,您可能需要一个额外的循环来使函数工作(因为值作为2D数组传递)
看看是否有效:
function totalsFunction (customVal, rowValues) {
var sumTotal = 0;
for(var i = 0; i < rowValues.length; i++) {
for(var j = 0; j < rowValues[0].length; j++) {
sumTotal += rowValues[i][j];
}
}
if(sumTotal == 0) {
return customVal;
}
else{
return sumTotal;
}
}
替代方案(每行使用脚本,数组输出)将使用map()和reduce()
function customSumPerRow(customVal, array) {
return array.map(function(r, i) {
return r.reduce(function(a, b) {
return a + b;
})
})
.map(function(r) {
return r == 0 ? customVal : r;
})
}