Função VBA para Remoção de Acentos
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
4 Comentários
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!
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
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.,
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.