Menu

LAMBDA no Excel: funções personalizadas, MAP e BYROW

=LAMBDA(price;price*1,2)(B2) define uma pequena função com uma entrada, price, e a chama em B2. Salve uma LAMBDA no Gerenciador de Nomes para usar como uma função nativa, ou passe para MAP, BYROW, SCAN e REDUCE.

Todas as planilhas desta página são ao vivo: mude um número ou uma fórmula e elas recalculam.

=LAMBDA(price,price*1.2)(B2) define uma pequena função com uma entrada, price, e chama essa função na hora em B2: o 2.5 da caneta vira 3. Sozinho, isso é só um =B2*1,2 mais comprido. A graça da LAMBDA é dar um nome à função no Gerenciador de Nomes, para uma fórmula longa virar =ADDVAT(B2), e passar a função para MAP, BYROW e as outras funções abaixo. A LAMBDA tem o mesmo nome no Excel em português, e você pode digitar as fórmulas em português na tabela, com ponto e vírgula: =LAMBDA(price;price*1,2)(B2).

Uma função chamada em cada preço
C2
ABC
1ItemPriceWith VAT
2Pen2.53
3Bag120144
4Lamp3542
5Mug89.6
6Desk150180
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =LAMBDA(price;price*1,2)(B2)

Sintaxe da LAMBDA

=LAMBDA([parameter1, parameter2, ...], calculation)
  • Cada parameter é um nome para uma entrada, como os nomes da LET. São permitidos até 253.
  • O último argumento é o calculation, que usa os parâmetros.
  • Os valores dos parâmetros vão entre parênteses logo depois do parêntese de fechamento: =LAMBDA(x;y;x*y)(3;4) retorna 12.

LAMBDA, MAP, BYROW, BYCOL, SCAN, REDUCE e MAKEARRAY precisam do Microsoft 365, do Excel 2024 ou do Excel para a Web. O Excel 2021 tem a LET, mas não essas funções. O Google Sheets também tem LAMBDA, e salva uma com nome em Dados > Funções nomeadas.

Salvar uma LAMBDA como função personalizada

Uma LAMBDA vira reutilizável quando você dá um nome a ela. O Excel não precisa de VBA nem de suplemento para isso:

  1. Vá em Fórmulas > Gerenciador de Nomes e clique em Novo (ou Fórmulas > Definir Nome).
  2. Em Nome, digite o nome da função, por exemplo ADDVAT.
  3. Em Refere-se a, digite a LAMBDA sem entradas: =LAMBDA(price;price*1,2).
  4. Clique em OK. Agora digite =ADDVAT(B2) em qualquer célula da pasta de trabalho.
Name:        ADDVAT
Refers to:   =LAMBDA(price,price*1.2)
In a cell:   =ADDVAT(B2)        returns 3 when B2 is 2.5

A função existe só nessa pasta de trabalho. Copie uma planilha que usa a função para outra pasta de trabalho e o nome vai junto. Mude a LAMBDA uma vez no Gerenciador de Nomes e todas as células que chamam a função se atualizam. Teste uma LAMBDA em uma célula, com as entradas entre parênteses, antes de salvar; um erro é mais fácil de ver ali.

MAP: aplicar uma LAMBDA a cada célula

A MAP chama a LAMBDA uma vez para cada célula de um intervalo e retorna um intervalo do mesmo formato. Aqui todo preço acima de 100 ganha 10% de desconto:

10% de desconto em preços acima de 100
C2
ABC
1ItemPricePrice to pay
2Pen2.52.5
3Bag120108
4Lamp3535
5Mug88
6Desk150135
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.

A bolsa (120) vira 108 e a mesa (150) vira 135; os outros preços passam como estão. Uma fórmula em C2 cobre a coluna inteira. A MAP também consegue percorrer dois intervalos do mesmo tamanho lado a lado: com quantidades em D2:D6, =MAP(B2:B6,D2:D6,LAMBDA(p,q,p*q)) (forma em inglês) multiplica cada preço pela quantidade dele.

BYROW: um resultado por linha

A BYROW entrega à LAMBDA uma linha inteira de cada vez, então a LAMBDA pode usar MÁXIMO, SOMA ou MÉDIA nela. A melhor nota e a média de cada aluno:

Melhor nota e média de cada aluno
E2
ABCDEF
1StudentTest 1Test 2Test 3BestAverage
2Ann7285909082.3
3Ben6470587064
4Cara8892959591.7
5Dan7560818172
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =BYROW(B2:D5;LAMBDA(r;MÁXIMO(r)))

E2 retorna 90, 70, 95 e 81; F2 retorna 82.3, 64, 91.7 e 72. Um =MÁXIMO(B2:D5) simples daria um número para a tabela inteira; a BYROW é o que mantém as linhas separadas em uma fórmula só. A BYCOL faz o mesmo por coluna: =BYCOL(B2:D5;LAMBDA(c;MÉDIA(c))) retorna a média de cada prova.

SCAN e REDUCE: totais acumulados

A REDUCE percorre um intervalo e leva um valor junto, retornando só o resultado final. A SCAN faz o mesmo, mas retorna cada passo, o que a torna um total acumulado em uma fórmula só:

Um total acumulado e um total
C2
ABCD
1ItemPriceRunning totalTotal
2Pen2.52.5315.5
3Bag120122.5
4Lamp35157.5
5Mug8165.5
6Desk150315.5
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.No Excel em português: =SCAN(0;B2:B6;LAMBDA(total;x;total+x))

O primeiro argumento, 0, é o valor inicial. Para cada preço, a LAMBDA recebe o total até ali e o preço, e retorna o novo total. C2 vai 2.5, 122.5, 157.5, 165.5, 315.5, e D2 mostra só o final, 315.5. Para um total simples a SOMA é mais fácil, mas a REDUCE pode levar qualquer coisa, como um texto que cresce ou uma contagem que só sobe em algumas linhas.

Dar nome a uma LAMBDA dentro de uma fórmula com a LET

Uma LAMBDA não precisa do Gerenciador de Nomes se só uma fórmula usa a função. Dê um nome a ela com a LET e passe o nome para a MAP ou a BYROW:

Uma LAMBDA com nome passada para a MAP
C2
ABC
1ItemPriceSale price
2Pen2.52.25
3Bag120108
4Lamp3531.5
5Mug87.2
6Desk150135
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.

Todo preço ganha 10% de desconto: 2.25, 108, 31.5, 7.2 e 135. No Excel você também pode chamar a LAMBDA com nome direto dentro da LET, =LET(f;LAMBDA(x;x*2);f(5)), que retorna 10.

Prática: um total por linha com a BYROW

Sua vez
E2
ABCDE
1StudentTest 1Test 2Test 3Total
2Ann728590
3Ben647058
4Cara889295
5Dan756081
Clique em uma célula para ver a fórmula. Mude um número ou uma fórmula e a planilha recalcula.

Sua vez: Em E2, retorne o total das três provas de cada aluno, um número por linha, com uma fórmula só.

Erros comuns com a LAMBDA

=LAMBDA(x,x*2)          #CALC!   defined but never called
=LAMBDA(x,x*2)(5)       10
=LAMBDA(x,y,x*y)(3)     #VALUE!  two parameters, one value
=LAMBDA(x,x*2)(3,4)     #VALUE!  one parameter, two values

No Excel em português, com ponto e vírgula, os erros aparecem como #CALC! e #VALOR! (#VALUE! em inglês; a tabela mostra os nomes de erro em inglês).

  • #CALC! significa que uma LAMBDA está em uma célula sem ser chamada. Coloque as entradas entre parênteses, ou salve no Gerenciador de Nomes e chame pelo nome.
  • #VALOR! significa que a quantidade de valores não bate com a quantidade de parâmetros. Conte dos dois lados.
  • #NOME? significa que a versão do Excel não tem a LAMBDA, ou que um nome salvo está escrito errado. Um nome de parâmetro segue as regras da LET: sem espaços e sem parecer um endereço de célula.
  • Uma LAMBDA da BYROW que retorna vários valores por linha dá #CALC!. Cada linha precisa produzir um valor; para retornar uma linha de resultados, use a MAKEARRAY ou uma fórmula de matriz comum.

Perguntas frequentes

O que é a função LAMBDA no Excel?

Ela transforma uma fórmula em uma função com entradas nomeadas. =LAMBDA(price;price*1,2) recebe uma entrada chamada price e retorna price vezes 1,2. Chame a função colocando a entrada entre parênteses, =LAMBDA(price;price*1,2)(B2), ou salve com um nome no Gerenciador de Nomes.

Como criar uma função personalizada no Excel sem VBA?

Abra Fórmulas > Gerenciador de Nomes > Novo, digite um nome como ADDVAT e, em Refere-se a, digite =LAMBDA(price;price*1,2). Clique em OK, e =ADDVAT(B2) funciona em qualquer célula dessa pasta de trabalho.

Por que minha LAMBDA retorna #CALC!?

Uma LAMBDA digitada em uma célula sem entradas, como =LAMBDA(x;x*2), é uma função que nunca foi chamada, então o Excel mostra #CALC!. Coloque a entrada entre parênteses depois dela, =LAMBDA(x;x*2)(5), ou salve no Gerenciador de Nomes.

Quais versões do Excel têm a LAMBDA?

Microsoft 365, Excel 2024 e Excel para a Web, junto com MAP, BYROW, BYCOL, SCAN, REDUCE e MAKEARRAY. O Excel 2021 tem a LET, mas não a LAMBDA.

O que a BYROW faz no Excel?

Ela roda uma LAMBDA uma vez por linha de um intervalo e retorna um resultado por linha: =BYROW(B2:D5;LAMBDA(r;MÁXIMO(r))) retorna o maior valor de cada linha, despejado para baixo.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR