Tempo de leitura:
Neste artigo vou mostrar-te a função SCAN no Excel que permite realizar um cálculo sobre um intervalo e acumular os valores ao longo do intervalo iterado.
É uma função muito útil quando pretendes realizar uma iteração sobre um intervalo, acumulando o resultado da última operação para obter o valor final.
Este tipo de cenário é comum em várias linguagens nomeadamente em programação quando executas ciclos [loops] sobre valores, mas também podes encontrar soluções semelhantes em Power Query quando utilizas a função List.Acumulate.
A função permite realizar um cálculo simples sobre um intervalo, como por exemplo uma SOMA ou MÉDIA, mas também permite definir um cálculo personalizado quando usas uma LAMBDA.
No artigo vamos ver as várias soluções que podes implementar!
Exemplo para uma criação de valores acumulados
Se pretenderes criar um intervalo para calcular acumulados, na verdade não precisas de usar a função SCAN, pois existem métodos mais tradicionais para realizar o cálculo.
Uma das possibilidades é realizar um cálculo matemático simples com a soma entre 2 células: A Célula atual + Célula anterior (acumulada).

Outra possibilidade é usar a Função SOMA, com a lógica de bloquear uma das células (a célula inicial do intervalo) e deixar a segunda coordenada solta -> Relativa.

Cada um dos cenários é viável, mas a função SCAN trabalha sobre um Array e a vantagem da função é que o cálculo pode ser personalizado. Significa que a função SCAN está destinada a ser usada com uma LAMBDA.
Mas para já vamos simular a função SCAN com um cálculo clássico, por exemplo uma SOMA. Ao aplicarmos a função SOMA, ou outra agregação em vez da LAMBDA estamos a utilizar um conceito denominado “Eta lambda” ou “Eta reduced lambda”.
Conhecer a função SCAN
=SCAN ([valor_inicial], matriz, LAMBDA(acumulador, valor, calculo))
Valor Inicial: Define o valor inicial do acumulador.
Matriz: O intervalo a ser analizado (iterado).
LAMBDA: Uma função LAMBDA chamada para trabalhar a matriz. A LAMBDA utiliza três parâmetros:
- Acumulador: O valor acumulado resultante da iteração anterior.
- Valor: O valor atual da matriz a ser iterado.
- Cálculo: O cálculo aplicado a cada elemento na matriz.
No primeiro cenário vamos então ver a função SCAN com uma função tradicional que substitui a LAMBDA.

Exemplo 2 – Aplicar a função SCAN com LAMBDA
Agora vamos aplicar num intervalo simples a função SCAN para compreendermos a lógica da LAMBDA aplicada.
=SCAN(C2;B5:B14;LAMBDA(acumulado;atual;atual * acumulado))

O resultado da Iteração pode ser analisado na imagem em baixo.

Quando definimos a função LAMBDA, devemos colocar os 2 parâmetros (Acumulado e Atual) mas no cálculo podemos usar apenas um dos parâmetros.
Eis um exemplo onde aplicamos o cálculo apenas ao valor atual…
=SCAN(C2;B5:B14;LAMBDA(acumulado;atual;atual * 2))

E agora um exemplo onde usamos apenas o valor acumulado.
=SCAN(C2;B5:B14;LAMBDA(acumulado;atual;acumulado * 2))

=SCAN(“”;F5:F14;LAMBDA(acumulado;atual;acumulado&”-“&atual))
Agora um exemplo onde podemos ver o comportamento do valor acumulado e o valor atual, mas onde podemos “visualizar” os valores. Vamos usar texto para poder ver os valores. Para texto devemos usar o valor inicial com uma string de texto em branco -> “”. Se usares outro valor, esse valor será o acumulado inicial.

No próximo exemplo vamos aplicar uma lógica mais complexa, mas perfeitamente possível com uma LAMBDA, ou seja, vamos usar um conjunto de funções para criar a “nossa” função personalizada:
=SCAN(“*”;F5:F14;LAMBDA(acumulado;atual;UNIRTEXTO(“-“;VERDADEIRO;MAIÚSCULAS(acumulado);atual)))

Exemplo 3 – Aplicar a função SCAN com um cálculo Financeiro
No último exemplo, temos a particularidade do intervalo a ser analisado pela função SCAN ser ele próprio definido por um cálculo, uma subtração entre Crédito e Débito.
=SCAN(F2;F5:F19-E5:E19;LAMBDA(acumulado;atual;acumulado + atual))

Como podemos verificar a função SCAN pode realizar cálculos simples, mas também bastante mais complexos, com a particularidade de acumular sempre o valor da última iteração.
Uma função a ter em conta para trabalhar sobre intervalos!
Próximo artigo:
Artigo Anterior:
Artigos por Categoria
Artigos por Categoria
- Microsoft Excel (44)
- Power Apps (16)
- Power Automate (3)
- Power BI (11)
- Power Query (14)
- Python (3)
- VBA (7)

Leave a Reply