Núm. Extenso

Função Números por Extenso em VBA

Criar uma função em VBA que converte números em valores por extenso pode ser um pouco complexo, devido às regras de numeração em português. Abaixo, segue uma função básica que pode converter números inteiros até 999. Se você precisar de uma função mais abrangente, que lide com números maiores e decimais, recomendo procurar uma biblioteca específica ou expandir o código.


Function NumeroPorExtenso(ByVal Numero As Integer) As String
    Dim Unidades As Variant
    Dim Dezenas As Variant
    Dim Centenas As Variant
    Dim NumExtenso As String
    Dim Resto As Integer

    ' Arrays de strings para as unidades, dezenas e centenas
    Unidades = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove")
    Dezenas = Array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa")
    Centenas = Array("", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos")

    ' Verificar centenas
    If Numero = 100 Then
        NumExtenso = "cem"
    Else
        NumExtenso = Centenas(Numero \ 100)
    End If

    Resto = Numero Mod 100

    ' Verificar dezenas
    If Resto >= 10 And Resto <= 19 Then
        NumExtenso = NumExtenso & " " & Array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove")(Resto - 10)
    Else
        NumExtenso = NumExtenso & " " & Dezenas(Resto \ 10)
        Resto = Resto Mod 10
    End If

    ' Verificar unidades
    NumExtenso = NumExtenso & " " & Unidades(Resto)

    ' Remover espaços extras
    NumeroPorExtenso = Trim(Replace(NumExtenso, "  ", " "))
End Function

Sub ConverterNumeroPorExtenso()
    Dim Numero As Integer
    Dim Extenso As String

    ' Lê o número da célula A1
    Numero = ThisWorkbook.Sheets(1).Range("A1").Value

    ' Converte para extenso
    Extenso = NumeroPorExtenso(Numero)

    ' Escreve o resultado na célula A2
    ThisWorkbook.Sheets(1).Range("A2").Value = Extenso
End Sub



Abra o Excel e pressione ALT + F11 para abrir o Editor do VBA.
No menu “Inserir”, escolha “Módulo” para criar um novo módulo.
Cole o código acima no módulo.
Execute a sub-rotina ConverterNumeroPorExtenso com um número na célula A1 da primeira planilha.
Este código irá ler o número da célula A1, converter para por extenso e colocar o resultado na célula A2. Note que este código é limitado a números inteiros até 999. Para números maiores ou com decimais, a função precisaria ser significativamente expandida.

Caso queira receber esse arquivo Excel, contendo essa função, é só enviar um e-mail
solicitando para o endereço
marmitanao@gmail.com