Imagine que você queria uma consolidação por mês, somando os valores dos recebidos no més de março, abril, maio e junho, como o que temos abaixo:
Certamente o seu primeiro pensamento deve ser a função SOMASE, o que é bem coerente. Porém existe um problema no uso dessa função:
criterio- O padrão ou teste a ser aplicado emintervalo.Se
intervalocontiver texto para verificação,criteriodeverá ser uma string.criteriopode conter caracteres curinga, inclusive?para corresponder a qualquer caractere individual e*para corresponder a zero ou mais caracteres adjacentes. Para fazer correspondência com um ponto de interrogação ou asterisco, adicione o prefixo (~) (por exemplo,~?e~*). Um critério para string deve ficar entre aspas. Ocriterioé conferido em cada célula nointervaloem busca de igualdade (ou correspondência, se caracteres curinga forem usados).Se
intervalocontiver números para verificação,criteriopoderá ser string ou número. Se um número for fornecido, ocriterioserá conferido em todas as células dointervaloem busca de igualdade. Caso contrário,criteriopode ser uma string que contém um número (que também é sujeito a verificações de igualdade) ou um número prefixado por qualquer um dos seguintes operadores:=(verificações de igualdade),>(verifica se o valor do intervalo de células é maior que o valor do critério) ou<(verifica se o valor do intervalo de células é menor que o valor do critério)
/**
* Somase com o critério de uma fórmula
* @param intervalo_teste O intervalo onde o a fórmula será testada
* @param reference_month A célula que tem o mês de referência para comparação
* @param intervalo_a_somar O intervalo que terá os dados a serem somados
* @customfunction
*/
function MONTHLY_SUM(intervalo_teste, reference_month, intervalo_a_somar){
var ss = SpreadsheetApp.getActiveSheet();
var data = intervalo_teste;
var data2Sum = intervalo_a_somar;
var d1, d2;
var sum2return = 0;
for(var i=0; i<data.length; i++){
d1 = new Date(reference_month);
d2 = new Date(data[i]);
if(d1.getMonth() === d2.getMonth()){
if(parseInt(data2Sum[i])){
sum2return += parseInt(data2Sum[i]);
}
}
}
return sum2return
}Em outro momento falo sobre esses comentários estilosos antes do código mesmo da função, e o que eles proporcionam