numerosaletras

VBA · LAMBDA · Apps Script

Valor por extenso no Excel.

Escolha as opções e leve o código já ajustado — com as regras que os códigos de fórum erram: o «e» entre classes, «cem» contra «cento» e o «de» dos múltiplos exatos de milhão.

ValorPorExtenso.bas

 

Prévia

=ValorPorExtenso( )

o ponto de partida

O Excel nunca teve essa função.

Em nenhuma versão, em nenhum idioma. Quem digita =EXTENSO( e espera o autocompletar aparecer descobre em dois segundos que ali não há nada. O Excel converte data em texto, número em moeda, texto em número — mas escrever «mil duzentos e trinta e quatro reais» ele não faz sozinho.

A razão é que isso não é formatação, é gramática. As regras de escrita por extenso mudam de língua para língua e não cabem numa opção de célula. Então sobram três caminhos, e a diferença entre eles não é técnica: é sobre o que a sua máquina e a sua empresa permitem.

três caminhos

Qual deles é o seu.

As três abas do gerador acima. Não são versões melhores e piores do mesmo código — são respostas a restrições diferentes.

Macro VBA

Excel para computador, arquivo salvo como .xlsm

Cobre até trilhões e usa o tipo Currency, que não erra centavo.

A pasta de trabalho passa a ser .xlsm e o Excel avisa ao abrir. Arquivo baixado da internet ou recebido por e-mail vem com as macros bloqueadas por padrão.

LAMBDA

Excel 365 ou 2021, sem permissão para macros

A pasta continua .xlsx comum: sem aviso de segurança, sem bloqueio. Passa em ambiente corporativo que proíbe macro por política.

Cobre até 999.999.999,99 e exige criar quatro nomes no Gerenciador de Nomes, na ordem certa.

Apps Script

Planilhas Google

Funciona em qualquer navegador e acompanha a planilha compartilhada.

É por planilha: cada arquivo novo precisa do script colado de novo.

instalar a macro

Cinco passos, uma vez só.

Depois disso a função vive naquela pasta de trabalho e funciona como qualquer outra fórmula.

  1. 01

    Abra o editor

    No Windows, Alt+F11. No Mac, menu Ferramentas ▸ Macro ▸ Editor do Visual Basic. A janela que abre é a mesma há vinte anos — é ela mesmo.

  2. 02

    Insira um módulo

    Menu Inserir ▸ Módulo. Precisa ser um módulo, não a folha nem a pasta de trabalho: função colada no lugar errado não aparece na planilha.

  3. 03

    Cole o código

    Copie o bloco acima e cole na janela em branco do módulo. Não é preciso executar nada: a função passa a existir assim que o código está lá.

  4. 04

    Salve como .xlsm

    Arquivo ▸ Salvar como ▸ Pasta de Trabalho Habilitada para Macro. Salvar como .xlsx comum descarta o código sem avisar direito, e a função some ao reabrir.

  5. 05

    Use na planilha

    Em qualquer célula: =ValorPorExtenso(A1). Se aparecer #NOME?, o código não está num módulo da pasta aberta ou o nome foi digitado diferente.

o Excel em português

Metade é traduzida, metade não.

As funções de planilha vêm traduzidas: SE, ÍNDICE, MAIÚSCULA, ARRUMAR. Algumas levam acento, e digitá-las sem acento não funciona. É por isso que colar uma fórmula de um site em inglês costuma devolver #NOME?.

O VBA, não. A linguagem da macro é a mesma em qualquer idioma do Office: If, Function, Select Case, Dim. Quem procura como usar a função SE dentro do VBA não encontra porque ela não existe ali — o que existe é If.

E há o separador de argumentos. No Excel em português do Brasil é o ponto e vírgula, porque a vírgula já está ocupada como separador decimal. Fórmula copiada de fonte em inglês vem com vírgula e precisa ser trocada — o código gerado acima já sai com ponto e vírgula.

Detalhe para quem trabalha com colegas em Portugal: alguns nomes diferem entre as duas variantes. ARRUMAR no Brasil é COMPACTAR em Portugal, e a mesma fórmula não atravessa o Atlântico sem ajuste.

por que este código

Três erros que quase todo código de fórum comete.

mil e duzentos e trinta e quatro

mil duzentos e trinta e quatro

Entre classes o «e» só entra antes da última, e apenas quando ela é menor que cem ou múltiplo exato de cem. 1.200 é «mil e duzentos»; 1.234, não.

um milhão reais

um milhão de reais

Múltiplos exatos de milhão exigem «de» antes do substantivo. Mas «um milhão e quinhentos mil reais» não leva, porque seguem classes menores.

cento reais

cem reais

«Cem» quando está sozinho, «cento» quando vem seguido: cento e vinte, cento e um.

O código daqui sai do mesmo motor do conversor de números por extenso do site, e há testes automatizados que executam o Apps Script gerado e comparam a saída com a do conversor a cada mudança. Se as duas implementações se separarem, a compilação quebra antes de a página ir ao ar.

perguntas

Dúvidas frequentes.

Existe uma função nativa de extenso no Excel?

Não. O Excel nunca teve uma função nativa para escrever números por extenso, em nenhum idioma e em nenhuma versão. Quem procura por «=EXTENSO()» não acha porque ela não existe: é preciso uma macro, uma LAMBDA construída à mão ou um suplemento. O que esta página faz é gerar esse código pronto, em vez de mandar você adaptar um bloco genérico.

Por que o Excel bloqueia a minha macro?

Desde 2022 a Microsoft bloqueia por padrão macros em arquivos vindos da internet — baixados, recebidos por e-mail ou salvos numa pasta de rede não confiável. O arquivo carrega uma marca de origem e o Excel a respeita. Dá para desbloquear nas propriedades do arquivo, no Windows, marcando «Desbloquear». Se o ambiente proíbe macro por política da empresa, o caminho é a aba «Sem macros»: a LAMBDA vive num .xlsx comum e não dispara nenhum aviso.

O código VBA muda no Excel em português?

Não, e essa é a confusão mais comum. As funções de planilha são traduzidas — SE, ÍNDICE, MAIÚSCULA —, mas a linguagem VBA não: If, Function, Select Case e Dim continuam em inglês em qualquer idioma do Office. Quem procura «como usar a função SE no VBA» não encontra porque ela não existe ali; o que existe é If. A macro desta página já vem escrita assim e funciona igual em qualquer instalação.

Minha fórmula LAMBDA dá erro. O que houve?

Quase sempre é uma de três coisas. Primeira: os quatro nomes precisam ser criados na ordem em que dependem uns dos outros — _ATE99, depois _ATE999, depois _INT e por último ValorPorExtenso —, senão o Excel recusa uma referência que ainda não existe. Segunda: o separador de argumentos. No Excel em português do Brasil é ponto e vírgula, porque a vírgula já é o separador decimal; se a sua instalação usa vírgula, troque nas quatro fórmulas. Terceira: LAMBDA e LET exigem Excel 365 ou 2021 — no 2019 e anteriores não existem.

Por que não copiar um código pronto de um fórum?

Porque quase todos erram as mesmas coisas. Os três erros clássicos são escrever «mil e duzentos e trinta e quatro» (o «e» entre classes só entra antes da última quando ela é menor que cem ou múltiplo exato de cem), escrever «um milhão reais» sem o «de», e confundir escala longa com curta. O código gerado aqui sai do mesmo motor do conversor do site, com testes automatizados comparando as duas implementações a cada mudança.

Funciona no LibreOffice Calc?

A macro VBA costuma funcionar com ajustes, porque o LibreOffice interpreta boa parte do dialeto, mas não há garantia — algumas construções mudam de comportamento. A LAMBDA não funciona: é recurso do Excel 365. Para o Calc, o caminho mais previsível é o Basic próprio do LibreOffice, que pede uma adaptação do código.

a seguir

Se for um documento avulso.

Última revisão: 11 de agosto de 2026 · Relatar um erro