我希望根据同一列但在y行上的单元格颜色计算行x上的单元格值。
IE: 如果B3,D3和E3是蓝色的。 然后将B4,D4和E4的值相加。
我目前的尝试(相当差):
function sumWhereBackgroundColorElseWhereIs(color, colorRange, valueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var colorRange = sheet.getRange(colorRange);
var valueRange = sheet.getRange(valueRange);
var total = 0;
for (var i = 1; i <= colorRange.getNumRows(); i++) {
for (var j = 1; j <= colorRange.getNumColumns(); j++) {
var cell = range.getCell(i, j);
if(cell.getBackgroundColor() == color) {
}
}
}
for
var valueCell = range.getCell(i, j);
total += parseFloat(cell.getValue());
return total;
}
答案 0 :(得分:0)
使用自定义功能时,您无法按照自己的意图去做。
自定义函数中的range参数从范围向函数发送值数组,而不是范围对象本身。
因此,在您的代码中,colorRange将包含范围中的值而不是范围本身,因此无法确定背景颜色。
答案 1 :(得分:0)
你无法按照你的方式调用背景颜色。
已发布here
的变通方法此外,您必须键入颜色代码而不是名称。
在您的情况下,您必须像这样输入自定义功能
=sumWhereBackgroundColorElseWhereIs("#0000ff","B3:F3","B4:F4")
或者像这样
=sumWhereBackgroundColorElseWhereIs("#0000ff",CELL("address",B3)&":"&CELL("address",F3),CELL("address",B4)&":"&CELL("address",F4))
你的脚本看起来像这样
function sumWhereBackgroundColorElseWhereIs(color, ColorRange, ValueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var colorRange = sheet.getRange(ColorRange);
var valueRange = sheet.getRange(ValueRange);
var firstColumn = colorRange.getColumn();
var lastColumn = colorRange.getLastColumn();
var valueRangeRow = valueRange.getRow();
var backgrounds = colorRange.getBackgrounds();
backgrounds = backgrounds.toString().split(",");
var total = 0;
for (var i = firstColumn; i <= lastColumn; i++) {
var ref = i - firstColumn;
if (backgrounds[ref] === color) {
total = total + Number(sheet.getRange(valueRangeRow, i).getValue());
}
}
return total;
}