Com o Excel e possível realizarmos qualquer ação que vai da mais simples a mais complexa. Nesse artigo estarei mostrando a vocês como criar uma macro que escreve o valor por extenso de um numeral qualquer digitado em uma célula.
Para que possamos obter esse resultado estaremos fazendo uso do VBA(Visual Basic for Applications) para escrever o código que vai executar a ação.
Para iniciar precisamos ativar a guia Desenvolvedor para aparecer essa opção da imagem nas guias padrão do Excel.
Apos ter clicado em arquivo e em opção vai aparacer uma nova janela com varias configurações para realizarmos dentro do Excel vamos escolher essa.
Com a nova janela aberta segue as opções selecionadas com o quadrado vermelho para habilitar a guia desenvolvedor, clica em OK e pronto.
As vezes em relação as versões do Excel esse passo a passo pode ter nome deferentes mais são as mesmas configurações para ativar a guia.
Clica na guia Desenvolvedor e na opção Visual Basic ou pressione Alt+F11 depois no menu Inserir clica em Modulo para adicionar.
Excel e Macro VBA – Definindo a Macro para Escrever por Extenso
O que é uma macro?
Uma macro é uma coleção de comandos que você pode aplicar com um único clique e executar uma determinada ação. As macros podem automatizar quase tudo que seja possível executar no programa que você está usando e até mesmo permitem fazer coisas que talvez você não soubesse que fossem possíveis.
As macros são programação, mas para usá-las, você não precisa ser um desenvolvedor e nem mesmo ter conhecimento de programação. A maioria das macros que você pode criar nos programas do Office são escritas em uma linguagem chamada Microsoft Visual Basic for Application, ou VBA.
Excel e Macro VBA – Agora que você já sabe o conceito de macro e para que ela serve, assim vai ficar bem mais fácil de entender como funcionara nossa macro.
Com o novo modulo inserido copia o código e cola dentro do Modulo inserido, caso queira digitar para aprender fica ao seu critério.
<code>Function Extenso_Valor(valor As Double) As String Dim strMoeda As String Dim cents As Variant Dim decimalSep As String ' Se o valor for igual ou maior que 1 quatrilhao ' passar erro e sair da funcao If valor > 999999999999999# Then Extenso_Valor = "Valor excede 999.999.999.999.999" Exit Function End If ' Se valor for igual a 1, a unidade está no singular If WorksheetFunction.RoundDown(valor, 0) = 1 Then ' a string da moeda no singular strMoeda = " real" ' Se for maior que 1 a unidade está no plural ElseIf WorksheetFunction.RoundDown(valor, 0) > 1 Then strMoeda = " reais" End If ' Remove os centavos cents = valor - WorksheetFunction.RoundDown(valor, 0) ' Remove os centavos do valor valor = valor - CDbl(cents) ' Passo o extenso dos centavos cents = centavos(CDbl(cents) * 100) ' End If ' Caso a string seja diferente de branco e valor seja maior ou igual a 1 If cents <> "" And valor >= 1 Then ' acrescentar uma vírgula antes do extenso cents = " e " & cents End If ' Iniciar o processo de conversao dos valores longos strMoeda = Trim(Trilhoes(valor)) & strMoeda & cents strMoeda = Replace(strMoeda, ", e", " e") strMoeda = Replace(strMoeda, ", r", " r") If Left(strMoeda, 2) = "e " Then strMoeda = Mid(strMoeda, 3, Len(strMoeda)) 'ElseIf Left(strMoeda, 5) = "mil e" Then ' strMoeda = Mid(strMoeda, 5, Len(strMoeda)) End If vzz = "00000000000000000000" vtam = Len(Trim(Mid(Trim(valor), 2, 100))) If Right(vzz + vzz + vzz + vzz, vtam) = Mid(Trim(valor), 2, 100) And InStr(UCase(strMoeda), UCase("es ")) > 0 Then vetor = Split(strMoeda, " ") vtrocar = vetor(UBound(vetor)) strMoeda = Replace(strMoeda, vtrocar, "de " + vtrocar) End If Extenso_Valor = strMoeda End Function Private Function centavos(valor As Double) As String Dim dezena As Integer Dim unidade As Integer ' Passa o valor para base decimal valor = Round(CDbl(valor / 100), 2) ' Se for um centavo, escrever valor e sair da funcao If valor = 0.01 Then centavos = "um centavo" Exit Function End If ' Repassa valor para dezenas valor = valor * 100 ' Se nao houver dezenas no valor passado If dezenas(valor) = "" Then ' a string centavos fica em branco centavos = "" Else ' caso contrário, passar extenso das dezenas e concatenar ' com a palavra centavos centavos = dezenas(valor) & " centavos" End If End Function Private Function unidades(unidade As Double) As String Dim unid(9) ' Define as unidades a serem usadas unid(1) = "um": unid(6) = "seis" unid(2) = "dois": unid(7) = "sete" unid(3) = "três": unid(8) = "oito" unid(4) = "quatro": unid(9) = "nove" unid(5) = "cinco" ' Retorna a string referente a unidade passada para ' esta funcao unidades = Trim(unid(unidade)) End Function Private Function dezenas(dezena As Double) As String Dim dezes(9) Dim dez(9) Dim intDezena As Double Dim intUnidade As Double Dim tmpStr As String ' Define as dezenas a serem utilizadas dezes(1) = "onze": dezes(6) = "dezesseis" dezes(2) = "doze": dezes(7) = "dezessete" dezes(3) = "treze": dezes(8) = "dezoito" dezes(4) = "quatorze": dezes(9) = "dezenove" dezes(5) = "quinze" dez(1) = "dez": dez(6) = "sessenta" dez(2) = "vinte": dez(7) = "setenta" dez(3) = "trinta": dez(8) = "oitenta" dez(4) = "quarenta": dez(9) = "noventa" dez(5) = "cinquenta" ' Calcula o inteiro da dezena intDezena = Int(dezena / 10) ' Calcula o inteiro da unidade intUnidade = dezena Mod 10 ' Se o inteiro da dezena for zero If intDezena = 0 Then ' dezenas sao iguais as unidades dezenas = unidades(intUnidade) Exit Function Else: ' caso contrário, é igual a dez dezenas = dez(intDezena) End If ' Se o inteiro da dezena for igual a 1 e ' o inteiro da unidade for zero, os valores estao ' entre 11 e 19 If (intDezena = 1 And intUnidade > 0) Then dezenas = dezes(intUnidade) Else ' Caso contrário, valor está entre 20 e 90 inclusive If (intDezena > 1 And intUnidade > 0) Then ' Concatena a string da dezena com a string da unidade dezenas = dezenas & " e " & unidades(intUnidade) End If End If dezenas = dezenas End Function Private Function centenas(centena As Double) As String Dim tmpCento As Double Dim tmpDez As Double Dim tmpUni As Double Dim tmpUniMod As Double Dim tmpModDez As Double Dim centoString As String Dim cento(9) ' Define as centenas cento(1) = "cento": cento(6) = "seiscentos" cento(2) = "duzentos": cento(7) = "setecentos" cento(3) = "trezentos": cento(8) = "oitocentos" cento(4) = "quatrocentos": cento(9) = "novecentos" cento(5) = "quinhentos" ' Calcula o inteiro da centena tmpCento = Int(centena / 100) ' Calcula a parte da dezena tmpDez = centena - (tmpCento * 100) ' Calcula o inteiro da unidade tmpUni = Int(tmpDez / 10) ' Calcula o resto da unidade tmpUniMod = tmpUni Mod 10 ' Calcula o resto da dezena tmpModDez = tmpDez Mod 10 ' Se centena for cem, definir string como "cem " e sair If centena = 100 Then centoString = "cem " Else ' Caso contrário definir a string da centena centoString = cento(tmpCento) End If ' Avalia se a unidade é maior ou igual a zero, se o resto da unidade é igual ou ' maior que zero, se a dezena é maior ou igual a um e se a centena é igual ou ' maior que 1. Se forem verdadeiros; entao, adicionar " e " a string da centena If (tmpUni >= 0 And tmpUniMod >= 0 And tmpDez >= 1 And tmpCento >= 1) Then centoString = centoString & " e " End If ' Concatena a string do cento com a string da dezena centenas = Trim(centoString & dezenas(tmpDez)) End Function Private Function milhares(milhar As Double) As String Dim tmpMilhar As Double Dim tmpCento As Double Dim milString As String ' Calcula o inteiro da milhar tmpMilhar = Int(milhar / 1000) ' Calcula o cento dentro da milhar tmpCento = milhar - (tmpMilhar * 1000) ' Se milhar for zero, entao a string da milhar fica em branco If tmpMilhar = 0 Then milString = "" ' Se for igual a 1, entao ' If '(tmpMilhar = 1) Then ' string da milhar é igual a unidade e "mil" 'milString = unidades(tmpMilhar) & "um mil " ' se maior que 1 e menor que dez, string igual a unidades If (tmpMilhar >= 1 And tmpMilhar < 10) Then milString = unidades(tmpMilhar) & " mil, " ' Se for entre 10 e 100, entao string igual a dezenas ElseIf (tmpMilhar >= 10 And tmpMilhar < 100) Then milString = dezenas(tmpMilhar) & " mil, " ' Se for entre 100 e 1000, entao igual string centenas ElseIf (tmpMilhar >= 100 And tmpMilhar < 1000) Then milString = centenas(tmpMilhar) & " mil, " End If 'If tmpCento = 1 Then milString = " e " If (tmpCento >= 1 And tmpCento <= 100) Then milString = milString & "e " milhares = Trim(milString & centenas(tmpCento)) End Function Private Function milhoes(milhao As Double) As String ' Ver comentários para milhares acima Dim tmpMilhao As Double Dim tmpMilhares As Double Dim miString As String tmpMilhao = Int(milhao / 1000000) tmpMilhares = milhao - (tmpMilhao * 1000000) If tmpMilhao = 0 Then miString = "" If (tmpMilhao = 1) Then miString = unidades(tmpMilhao) & " milhão, " ElseIf (tmpMilhao > 1 And tmpMilhao < 10) Then miString = unidades(tmpMilhao) & " milhões, " ElseIf (tmpMilhao >= 10 And tmpMilhao < 100) Then miString = dezenas(tmpMilhao) & " milhões, " ElseIf (tmpMilhao >= 100 And tmpMilhao < 1000) Then miString = centenas(tmpMilhao) & " milhões, " End If If milhao = 1000000# Then miString = "um milhão de " milhoes = Trim(miString & milhares(tmpMilhares)) End Function Private Function bilhoes(bilhao As Double) As String ' Ver comentários para milhares acima Dim tmpBilhao As Double Dim tmpMilhao As Double 'Dim tmpMilhoes As Double Dim biString As String tmpBilhao = Int(bilhao / 1000000000) tmpMilhao = bilhao - (tmpBilhao * 1000000000) If (tmpBilhao = 1) Then biString = unidades(tmpBilhao) & " bilhão, " ElseIf (tmpBilhao > 1 And tmpBilhao < 10) Then biString = unidades(tmpBilhao) & " bilhões, " ElseIf (tmpBilhao >= 10 And tmpBilhao < 100) Then biString = dezenas(tmpBilhao) & " bilhões, " ElseIf (tmpBilhao >= 100 And tmpBilhao < 1000) Then biString = centenas(tmpBilhao) & " bilhões, " End If If bilhao = 1000000000# Then biString = "um bilhão de " bilhoes = Trim(biString & milhoes(tmpMilhao)) End Function Private Function Trilhoes(Trilhao As Double) As String ' Ver comentários para milhares acima Dim tmpTrilhao As Double Dim tmpBilhao As Double Dim triString As String tmpTrilhao = Int(Trilhao / 1000000000000#) tmpBilhao = Trilhao - (tmpTrilhao * 1000000000000#) If (tmpTrilhao = 1) Then triString = unidades(tmpTrilhao) & " trilhão, " ElseIf (tmpTrilhao > 1 And tmpTrilhao < 10) Then triString = unidades(tmpTrilhao) & " trilhões, " ElseIf (tmpTrilhao >= 10 And tmpTrilhao < 100) Then triString = dezenas(tmpTrilhao) & " trilhões, " ElseIf (tmpTrilhao >= 100 And tmpTrilhao < 1000) Then triString = centenas(tmpTrilhao) & " trilhões, " End If If Trilhao = 1000000000000# Then triString = "um trilhão de " Trilhoes = Trim(triString & bilhoes(tmpBilhao)) End Function Function arredBaixo(valor) Dim tmpValor tmpValor = Round(CDbl(Right(Round(valor, 2) * 100, 2)) / 100, 2) arredBaixo = Round(Round(valor, 2) - tmpValor, 0) End Function</code>
Excel e Macro VBA – Atribuindo a Macro a uma formulário
Retorne a planilha e escolha uma célula qualquer e vamos inserir a função que acabamos de cria para exibir o valor por extenso.
Clica em inserir função onde esta destacado e apos aparecer essa janela, escolha na caixinha a seguinte palavra “Definida pelo o usuário”. Perceba que a nossa função vai aparecer “Extenso_Valor”, selecione ela e clica em OK para passarmos para a próxima etapa.
Excel e Macro VBA. Aponta para o argumento da função dentro da caixa de texto onde está a sua referencia o melhor dizendo o seu valor que quer passar para texto. Veja que ao indicar para a caixa de texto que o valor esta na célula A3 e possível visualizar como vai aparecer na célula e uma serie de informações a mais relevantes.
Para que as iniciais ficam em letras maiúsculas basta fazer o uso da brilhante função padrão do Excel a =PRI.MAIÚSCULA() que sera convertido para maiúsculas as iniciais de cada nome.
Pessoal era isso que tinha para passar para vocês hoje. Em nosso site temos muitas novidades não deixa de conferir.
Este código não é de minha autoria foi repassado por um colaborador. Apenas fiz algumas incrementações nas imagens.
Fonte: http://www.macoratti.net/14/04/vba_ext1.htm
Veja mais…
Planilhas para a gestão do seu negócio em Excel
Gerar orçamento em Excel e salvar em PDF
Planilha simulador de parcelamento em Excel
Como controlar recebimentos em cartões de crédito
A Importância do Fluxo de Caixa nas Empresas
Sistema Controle de Contas a Pagar e Receber
Planilha agenda de contato corporativo em Excel
Planilha para Controlar de Dízimos e Ofertas em Excel
Baixa a planilha para usa-la.