Sou iniciante no script do Google Apps e gostaria de criar uma função para uma planilha que soma valores de células quando as células atendem a determinados critérios, como a cor de fundo. Além disso, gostaria de passar o intervalo como uma matriz e não usar a notação A1 pelo seguinte motivo.
Encontrei uma função que usa a notação A1 aqui . O problema é que quando eu o tenho em uma determinada célula
=sumWhereBackgroundColorIs("white", "A1:A10")
e eu copio o valor para a célula adjacente à direita o resultado será novamente
= sumWhereBackgroundColorIs ("branco", "A1: A10" )
enquanto eu gostaria de ter
= sumWhereBackgroundColorIs ("branco", "B1: B10" )
caso contrário, eu sempre modifico manualmente o argumento de entrada e quero evitar isso, pois tenho que usar essa função extensivamente.
Por isso, tentei passar um intervalo como uma matriz de valores usando
=sumIfBgColor(#ffffff, A1:A10)
function sumIfBgColor(color, range){
var x = 0;
for(var i = 0; i < range.length; i++){
for(var j = 0; j < range[i].length; j++){
var cell = getCell();
if(cell.getBackgroundColor() == color)
x += parseFloat(range[i][j]);
}
}
return x;
}
mas não sei como obter a célula (ou seja, o objeto do tipo Range) começando pelo que tenho.
fonte
A1 notation
.Respostas:
Para a alegação de impossibilidade de @ Jacob, eu a refuto assim ... (mas obrigado pela velocidade aprimorada)
usando:
com as seguintes funções fará o que você deseja.
fonte
Referência: http://igoogledrive.blogspot.com/2015/11/google-spreadsheet-sum-of-colored-cells.html
Em vez de passar parâmetros como string para a função personalizada, o script a seguir recebe a entrada como um intervalo:
Dê uma olhada na seguinte captura de tela:
fonte
O pequeno script a seguir fará o truque.
Código
Explicado
Primeiro, a planilha ativa é determinada. Em seguida, os valores e as cores, com base no intervalo, são buscados. Os valores serão usados para percorrer as cores e, finalmente, a soma.
Uso
Exemplo
Criei um arquivo de exemplo para você: soma baseada no plano de fundo
fonte