Função VBA para Remoção de Acentos

4
1721

Esta semana estive trabalhando em um análise de dados, onde eu precisava comparar duas lista de valores. Acabei me deparando com a situação que uma lista as palavras estavam escritas com acentuação e na outra não. Infelizmente, no Excel, não temos uma função nativa que remove acentos.

Para isso tive que recorrer a uma função personalizada, mais conhecidas como UDF (User-Defined Function).

As UDF’s são funções criadas no VBA e que também podem ser utilizadas numa planilha de dados. O código é bem simples. Veja abaixo:


Option Explicit

Function RemoveAcentos(sString As String) As String
    
    Dim sAcentos As String
    Dim sSemAcentos As String
    Dim sTemp As String
    Dim i As Long
 
    'Liste nesta variável todos os acentos possíveis
    sAcentos = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ"
     
    'Letras sem acentuação correspondentes para substituição
    sSemAcentos = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
     
    'Armazena em sTemp a string recebida
    sTemp = sString
     
    'Loop que percorrerá todas as letras da variável 'sAcentos',
    'subtituindo pelo caractere correspondente em 'sSemAcentos'
    For i = 1 To Len(sAcentos)
        sTemp = Replace(sTemp, Mid(sAcentos, i, 1), Mid(sSemAcentos, i, 1))
    Next i
     
    'Retorna a nova string
    RemoveAcentos = sTemp
     
End Function

O código já está comentado. Mas basicamente consiste em duas strings do mesmo tamanho, contendo os acentos em uma, e as correspondências sem acentos na outra string.

Depois é feito um loop For percorrendo cada uma das letras acentuadas, e fazendo uma substituição pelo caractere correspondente usando a função Replace.

For i = 1 To Len(sAcentos)
    sTemp = Replace(sTemp, Mid(sAcentos, i, 1), Mid(sSemAcentos, i, 1))
Next i

Baixar Planilha de Exemplo
  • Krys

    oi como uso esse código ? esta dando erro. Tenho uma planilha que é resultado de duas outras. como faço pra esse código considerar e retirar os acentos na planilha de resultado a qual já tenho uma macro muito extensa? Tentei abrir um modulo mas não funcionou e nem entre o código da macro. Me ajuda!

    • laennder

      Krys, você tem que adicionar o código em um módulo no Editor de Visual Basic. Pressione as teclas Alt + F11, e vá em inserir módulo. Cole o código. Certifique que esteja inserindo o módulo na pasta de trabalho que deseja utilizar a função.

      É importante também salvar o arquivo na extensão XLSM

  • Ailton Oliveira

    amigo, eu tenho o seguinte codigo:

    Dim MyOlapp As Object, MeuItem As Object

    Set MyOlapp = CreateObject(“Outlook.Application”)

    Set MeuItem = MyOlapp.CreateItem(olMailItem)

    With MeuItem

    .To = “xxx@commercial.com.br;”

    .cc = “XXX@Commercial.com.br;”

    .Subject = “Orçado x realizado – Atualizado até: ” & [ae1].Text

    .Body = “Prezados (as),” & vbCrLf & _

    ” ” & vbCrLf & _

    ” ” & vbCrLf & _

    “Segue o Link contendo informações referente ao orçado x Realizado.” & vbCrLf & _

    “file://Sdufls04sdu04PúblicoBudget_2016GERAL.xlsx” & vbCrLf & _

    “atualizado até: ” & [ae1].Value & “.” & vbCrLf & _

    ” ” & vbCrLf & _

    “Desde já agradeço e nos colocamos à disposição para eventuais duvidas.” & vbCrLf & _

    ” ” & vbCrLf & _

    “Controladoria” & vbCrLf & _

    “Tel.:: 55 11 3513-XXXXX” & vbCrLf & _

    ” ” & vbCrLf & _

    ” ” & vbCrLf & _

    ” ” & vbCrLf & _

    “XXXX” & vbCrLf

    .Display

    End With

    End Sub

    o meu maior problema neste código é que o dominio (pasta Publico) que estou tentando incluir como hiperlink no outlook tem acento, existe alguma forma de eu corrigir isto via vba? pois é um dominio utilizado por muitas areas e eu não consigo renomear.

    Abs.,

  • Eduardo França

    Laennder, obrigado por compartilhar. Já tinha visto esta macro em outro site, tenho-a como suplemento e utilizo bastante em meus relatórios.
    Sou grande fã do Excel, atualmente aprendendo também Java (faculdade) e Python (autodidata) e me aventurando cada vez mais a fundo no Visual Basic for Applications.
    Gostaria que você (e toda a equipe do Guru do Excel) soubesse que já me ajudaram inúmeras vezes e agradeço por compartilhar o conhecimento adquirido.

    Tenho uma pergunta a você, referente à sua certificação Microsoft Excel Specialist Expert, na verdade, somente da Microsoft Excel Specialist, que você deve ter feito também.
    Como é a prova? Gostaria de estar preparado, pois estou pensando em obter a certificação, mas para isso tenho que viajar para outro estado (Em uma pesquisa, caindo no site da Microsoft, obtive o centros de ensino mais próximos somente em SP e RJ, mas moro em MG).

    Gostaria de agradecer mais uma vez pela “consultorias” prestadas, que elevaram exponencialmente o nível de minhas planilhas.