Funções REDUCE e SCAN no Excel: Entenda a Diferença

Tempo de leitura:

2-4 minutos

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)

)

Captura de tela de uma planilha do Excel mostrando a fórmula =REDUCE() e uma lista de números com o total de 110 na célula C4.

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)

)

Tabela de Excel mostrando uma lista de valores com funções SCAN e REDUCE, destacando valores acumulados.

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)

    )

)

Planilha do Excel mostrando a função REDUCE e UNIRTEXTO, com uma lista de letras que são combinadas em uma única string.

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

Tabela em Excel mostrando funções SCAN e REDUCE, com listas de letras organizadas em colunas.

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)

    )

)

Imagem de uma planilha do Excel mostrando dados para somar valores pares usando as funções REDUCE e SCAN.

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)

    )

)

Tabela do Excel com a função SCAN para somar valores pares, mostrando uma lista de números de 1 a 10, a coluna 'REDUCE' com o total de 30 e a coluna 'SCAN' com acumulados parciais.

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.

Fórmula de Excel utilizando a função SUBST().

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;””)

    )

)

Imagem de uma planilha do Excel mostrando fórmulas e dados relacionados a cursos de Excel e Power BI

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))

    )

)

Captura de tela de uma planilha do Excel mostrando fórmulas, tabelas e valores relacionados a Microsoft Excel, Power BI, Power Query, Power Apps e Python.

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.

Planilha do Excel mostrando cálculos financeiros com capital inicial de 10.000,00 €, taxas mensais e resultados de funções REDUCE e SCAN.

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:


Comentários

Leave a Reply

Discover more from Exceldriven

Subscribe now to keep reading and get access to the full archive.

Continue reading