sábado, 1 de mayo de 2021

Eliminar acentos con VBA en Microsoft Excel

Ayer mostraba como sustituir una letra acentuada por su equivalente sin acento mediante la opción "Reemplazar..." de Microsoft Excel.

Eliminar acentos con Reemplazar... en Microsoft Excel

Hoy os muestro cómo automatizarlo mediante una sencilla Macro en Visual Basic for Applications VBA.

La forma más sencilla de comenzar a programar en VBA, es usando el grabador de macros para generar la macro y luego modificar el código.

En el ejemplo uso ese método.

Podéis ver qué activé la grabación de macros, para luego realizar el proceso que expliqué ayer para reemplazar la letra a acentuada por su equivalente sin acento.

El resultado, generado por el grabador de macros, es este código:

    Cells.Replace What:="á", Replacement:="a", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


En este caso, modificar la macro, es tan sencillo como copiar y pegar estas líneas tantas veces como caracteres distintos deseemos sustituir. En el código de ejemplo los he marcado en negrita.

En el vídeo sustituyo la vocales mayúsculas y minúsculas con los acentos grave, agudo y circunflejo, presentes en idiomas como el francés o el catalán, y la ñ y la ç, presentes en castellano o portugués.

Este ejemplo se podría realizar con un bucle, pero como introducción a la modificación de macros, creo que es más instructivo de esta manera.


El código resultante es similar a este:

Sub ReemplazarAcentos()

'reenplazo letras minúsculas

    Cells.Replace What:="á", Replacement:="a", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="é", Replacement:="e", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="í", Replacement:="i", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="ó", Replacement:="o", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="ú", Replacement:="u", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


'reenplazo letras mayúsculas

    Cells.Replace What:="Á", Replacement:="A", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="É", Replacement:="E", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="Í", Replacement:="I", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="Ó", Replacement:="O", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="Ú", Replacement:="U", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

        

'reenplazo otras letras

    Cells.Replace What:="ü", Replacement:="u", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    Cells.Replace What:="Ü", Replacement:="U", LookAt:=xlPart, SearchOrder _

        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

End Sub


NOTA:

Toda instrucción que comience por apóstrofe en VBA es un comentario y no es tenido en cuenta por el programa.


El aspecto final de la macro es el de la imagen.


Aquí os dejo una animación con un ejemplo de la apertura y ejecución de la macro.


NOTA2:

Si observáis el vídeo, veréis que eliminó la primera instrucción, en la cual se seleccionaba la columna A, esto lo hago para que la macro se ejecute sobre las celdas seleccionadas, pudiendo aplicarla de esta forma a distintos rangos de celdas.


Espero que os resulte útil, esta es una de mis macros de almohada.

No hay comentarios:

Publicar un comentario