Tempo de leitura:
Neste artigo vou mostrar-te as funções REDUCE e SCAN no Microsoft Excel. Ambas percorrem uma matriz/intervalo valor a valor, usando uma função LAMBDA com um acumulador, mas diferem no que devolvem no fim: REDUCE “reduz” tudo a um único valor acumulado, enquanto SCAN mostra a evolução desse acumulador ao longo do caminho.
- REDUCE devolve apenas o resultado final
- SCAN devolve todos os resultados intermédios
O que faz a função REDUCE?
A função REDUCE aplica uma função LAMBDA a cada valor de uma matriz e devolve um único valor final acumulado.
=REDUCE([valor_inicial]; matriz; LAMBDA(acumulador; valor; cálculo))
O que faz a função SCAN?
A função SCAN também percorre uma matriz aplicando uma LAMBDA a cada valor, mas devolve uma matriz com todos os valores intermédios do acumulador.
=SCAN([valor_inicial]; matriz; LAMBDA(acumulador; valor; cálculo))
Comparação direta das 2 funções
Vamos começar com um exemplo simples para implementar as 2 funções.
Numa lista de valores vamos acumular a iteração entre os valores somando o valor acumulado ao valor atual da lista.
=REDUCE(
0;
B4:B13;
LAMBDA(acum;val;acum + val)
)

O resultado é 110 que é o acumulado da soma entre os vários valores da lista.
Ao valor acumulado soma o valor atual da lista, acumulando o valor num único resultado.
Realizando o mesmo cálculo com a função SCAN conseguimos ver a iteração do intervalo ao longo do percurso.
=SCAN(
0;
B4:B13;
LAMBDA(acum;val;acum + val)
)

Quando usas a função REDUCE pretendes apenas obter o resultado. Quando usas a função SCAN queres saber a evolução valor a valor.
Expressão LAMBDA
A expressão usada na LAMBDA pode ser qualquer uma. O conceito de LAMBDA é mesmo este, usar uma expressão personalizada, ou uma função personalizada.
No exemplo seguinte vamos criar uma LAMBDA já usando uma função de texto, UNIRTEXTO com os parâmetros específicos da LAMBDA.
=REDUCE(
“”;
B4:B13;
LAMBDA(acum;val;
UNIRTEXTO(“-“;VERDADEIRO;acum;val)
)
)

Com a função SCAN obtemos o resultado da iteração ao longo do intervalo.

Exemplo de soma apenas dos valores par num intervalo
Este exemplo já usa uma expressão LAMBDA mais complexa, uma vez que define uma condição para avaliar o valor atual.
=REDUCE(
0;
B4:B13;
LAMBDA(acum;val;
SE(ÉPAR(val);acum+val;acum)
)
)

Com a função SCAN mais uma vez conseguimos ver a evolução dos valores.
=SCAN(
0;
B4:B13;
LAMBDA(acum;val;
SE(ÉPAR(val);acum+val;acum)
)
)

Substituir caracteres de texto com a função REDUCE
No próximo exemplo vamos substituir uma série de caracteres num pedaço de texto.
Com as funções tradicionais necessitamos de encadear múltiplas funções para chegar ao resultado.

Com a função REDUCE podemos realizar a operação com uma única função e a LAMBDA.
=REDUCE(
B8:B10;
B13:B15;
LAMBDA(texto;remover;
SUBST(texto;remover;””)
)
)

Substituir valores de uma lista por outra lista
Neste exemplo vamos utilizar uma lógica diferente para o intervalo de iteração e também para a expressão LAMBDA.
O intervalo de iteração vai ser definido com a função SEQUÊNCIA e na expressão LAMBDA vamos utilizar a função SUBST para substituir um conjunto de texto por outro, mas com a função ÍNDICE para substituir cada ocorrência do intervalo por outro intervalo.
=REDUCE(
F3;
SEQUÊNCIA(LINS(B4:B8));
LAMBDA(texto;i;
SUBST(texto;ÍNDICE(B4:B8;i);ÍNDICE(C4:C8;i))
)
)

Definir valores acumulados
No último exemplo vamos definir o cálculo de um capital acumulado por uma taxa de juro.
Aqui o cenário é específico porque começa com um valor inicial.

A função REDUCE é útil quando queremos pegar numa lista de elementos e transformá-la num único resultado final, em que cada elemento é processado com base no resultado acumulado até esse momento.
Próximo artigo:
Artigo Anterior:
Artigos por Categoria
- Microsoft Excel (46)
- Power Apps (16)
- Power Automate (3)
- Power BI (12)
- Power Query (14)
- Python (3)
- VBA (7)

Leave a Reply