Quitar caracteres no deseados de un texto en Excel

Entrada núm: 22 of 24 de la serie Análisis de datos

Limpieza de datos en Excel

En más de una ocasión nos vamos a encontrar con un problema parecido a este: hemos importado datos desde otra aplicación, desde una base de datos externa, o quizás nos los han enviado por email con origen incierto, pero el caso es que el texto que nos llega contiene caracteres inapropiados y no deseados en nuestra tabla de datos, algo así:

AN2A MA56R$$IA MER$%CHAN S??OS
FER$NA&NDO DE$$STERO MAR?4TIN
JU&AN P$ERE%Z F%ERN(ANDEZ

Se trata de lo que, en términos generales, se podría denominar limpieza de datos, un tema muy extenso de lo que este ejemplo es solo un caso particular, pero un caso que no he visto resuelto en internet. En primer lugar se nos ocurre empezar a BUSCAR y REEMPLAZAR, y no digo que este sea un mal enfoque. Si solo tenemos uno o dos caracteres problemáticos, la cosa puede ser sencilla y la solucionamos en “dos patadas”. Pero si la lista de caracteres no deseados es grande, la labor se puede alargar más allá de lo recomendable.

Las soluciones que tenemos al alcance de la mano con las utilidades y fórmulas nativas de Excel tampoco son satisfactorias. Igual que antes, si se trata de un único caracter rebelde, la solución es fácil, pero no para el caso de una lista amplia.

Surge entonces la necesidad de escribir una función de usuario en VBA que haga esta labor. Al final he llegado a dos soluciones según dos enfoques distintos. En primer lugar una función a la que se suministra la lista de caracteres no deseados “[$,#,%,?…etc]” como primer argumento y el texto a limpiar “AN2A MA56R$$IA MER$%CHAN S??OS“como segundo argumento. El código es el siguiente:

En segundo lugar tengo una función a la que se suministra el alfabeto, o sea, no la lista de caracteres no deseados, sino la de caracteres deseados. El resto es igual, pero en lugar de comprobar si se cumple la condición de no pertenencia al vector de exclusión, comprobamos la pertenencia al vector de inclusión. El código es el siguiente:

Los operadores de VBA usados son:

Len(“Cadena”): devuelve la longitud, en número de caracteres, de una cadena. Es el equivalente a la función LARGO de la hoja

Mid(“Cadena”,i,j): extrae “j” elementos de la “Cadena”, empezando por la posición “i”

&: Ampersum, es el operador que concatena el texto que tiene antes con el que tiene después.

Like: Compara el texto que lo antecede con el patrón que lo sigue, y si encuentra equivalencia arroja “Verdadero”. Los siguientes ejemplos ilustran bien su funcionamiento:

 

Series Navigation<< Descomponer una columna en dos, alternando celdasBuscar en dos tablas con BUSCARV y ELEGIR >>

Comments

So empty here ... leave a comment!

Deja tu comentario aquí:

Sidebar



A %d blogueros les gusta esto: