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
intervalo
contiver texto para verificação,criterio
deverá ser uma string.criterio
pode 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 nointervalo
em busca de igualdade (ou correspondência, se caracteres curinga forem usados).Se
intervalo
contiver números para verificação,criterio
poderá ser string ou número. Se um número for fornecido, ocriterio
será conferido em todas as células dointervalo
em busca de igualdade. Caso contrário,criterio
pode 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