Skip to main content
19 June 2015
Follow Us

Como corrigir caracteres acentuados estranhos no Excel com uma simples macro

Na importação de dados de uma fonte externa para o Excel por vezes verificamos que os caracteres acentuados são apresentados de forma estranha. Por exemplo, em vez de “Consultoria e Mediação Imobiliária”, os dados são transferidos como “Consultoria e Mediação Imobiliária”. Por ser extremamente aborrecido corrigir manualmente este tipo de dados, criei uma pequena macro que resolve o assunto facilmente.

Exemplo de uma listagem com caracteres acentuados estranhos importada para o Excel

Vejamos um exemplo de uma importação do nosso gestor de conteúdos com as inscrições nos nossos cursos online. Para simplificar, vamos só analisar os títulos dos cursos:

Curso Rácios de Gestão
Curso Excel - Nìvel Avançado
Curso Rácios de Gestão
Curso Modelos de Negócio
Curso Falar em Público com Impacto
Curso Gestão do Tempo
Curso Planos de Negócios - Parte A
Curso Legislação Laboral
Curso Gestão do Tempo
Curso Planos de Negócios - Parte B
Curso Excel - Nìvel Avançado
Curso Excel - Nìvel Intermédio

Como é óbvio, esta informação não pode ser apresentada desta forma num relatório. Além disso, utilizar a função FIND + REPLACE (PROCURAR + SUBSTITUIR) também não é funcional pois obriga-nos a especificar todas as correções individualmente, e se voltarmos a realizar uma nova importação, teremos de repetir todo o processo.

Então, podemos utilizar a seguinte macro que cria a função personalizada CORRIGIRCARS. E tudo o que temos de fazer é introduzir como seu único argumento o texto que pretendemos corrigir.

Teremos assim, por exemplo, na coluna B da seguinte tabela um exemplo do texto já corrigido:

Excel VBA caracteres acentuados

A macro que permite corrigir os caracteres acentuados estranhos

Para utilizar esta função, introduza o código abaixo num módulo a partir do seu editor VBA (para aceder ao editor, clique em Alt+F11 e para inserir um novo módulo clique em Insert -> Module):

Function CorrigirCars(texto As String)
Dim A As String
Dim i, n As Integer

For i = 1 To Len(texto)
A = Mid(texto, i, 2)

Select Case A
Case "A£"
texto = Replace(texto, A, "ã")
Case "ã"
texto = Replace(texto, A, "ã")
Case "é"
texto = Replace(texto, A, "é")
Case "ç"
texto = Replace(texto, A, "ç")
Case "õ"
texto = Replace(texto, A, "õ")
Case "ó"
texto = Replace(texto, A, "ó")
Case "ê"
texto = Replace(texto, A, "ê")
Case "í"
texto = Replace(texto, A, "í")
Case "â"
texto = Replace(texto, A, "â")
Case "á"
texto = Replace(texto, A, "á")
Case "ú"
texto = Replace(texto, A, "ú")
Case "º"
texto = Replace(texto, A, "º")
End Select

Next i
CorrigirCars = texto
End Function

E aí está, problema ultrapassado! Não o vou maçar com os aspetos técnicos, trata-se de uma simples instrução SELECT…CASE. Se preferir, pode fazer o download do ficheiro em anexo que contém o exemplo apresentado neste post.


Assine a nossa newsletter e receba o nosso conteúdo diretamente no seu email