Macro para dividir cadenas con delimitador

Voy a iniciar este post en mi blog comentando sobre una herramienta muy utilizada por aquellos usuarios de Excel que importan información desde archivos planos hacia el interior de las hojas de Excel.

Si, me refiero indiscutiblemente a la herramienta: Texto en columnas. (asistente de varios cuadros de diálogo) que podemos encontrar en el grupo Herramientas de datos de la pestaña Datos.

Esta herramienta la cual bajo mi punto de vista me parece una herramienta formidable para tratar información dentro de archivos planos separada en muchos casos por caracteres especiales, es en todo su contexto una utilidad bastante practica que puede ser utilizada de manera similar con la información que podamos almacenar dentro de las celdas en una hoja de Excel.

En este caso afirmo enfáticamente que esta herramienta (Texto en columnas) no sólo puede usarse cuando queremos importar información a Excel, por el contrario, es muy factible poderla utilizar cuando queremos tratar información dentro de alguna(s) celda(s) que contengan delimitadores como caracteres inmersos dentro de cadenas de texto.


Es decir, cuando en una o quizás varias celdas queramos separar de manera individual (celdas independientes) porciones de texto de una cadena de texto mucho más grande que contenga algún patrón de separación (carácter separador).

Bajo este esquema dicha herramienta es bastante funcional. Sin embargo, esta herramienta tiene una limitante muy poco conocida, la cual se esconde de usuarios básicos por no estudiarla en su totalidad o de manera detenida.

Esta limitante que tiene la herramienta y que a simple vista puede ser interpretada como un error, es que no separa correctamente cadenas de texto cuando dichas cadenas son devueltas dentro de las celdas por funciones o fórmulas.

Por ejemplo, imagine que en la celda A1 usted tiene un nombre completo que usted mismo introdujo con el teclado dentro de la celda; Y en la celda A2 tiene ese mismo nombre, pero como fórmula de retorno desde la celda A1. Es decir, A1: Pedro Mora; A2: =A1.

Pues bien, si aplica el proceso que ejerce la herramienta (Texto en columnas) sobre ambas celdas, usted podrá apreciar que la herramienta sólo actúa sobre la celda A1 y no sobre la celda A2 (porque el nombre es devuelto mediante una fórmula).

Aquí quiero comentarle que esto no es un error de la herramienta, la verdad es que es, una limitante; una limitante que puede ser cubierta con programación mediante el entorno de desarrollo de VBA del Excel.

Por ejemplo, esta macro hace que el contenido de una celda (devuelta o no mediante fórmula) se divida si existe un carácter separador de coma (",") dentro de las palabras escritas o devueltas dentro de la celda.

Macro para dividir texto delimitado con comas

Sub DividirPorComa(MiRango As Range)
   Dim Celda As Range
   Dim MatrizResultado() As String
   Dim i As Long   
      For Each Celda In MiRango
         Range(Celda.Offset(0, 1), Celda.Offset(0, 6)).ClearContents
         MatrizResultado = Split(Celda.Value, ",")
         For i = 0 To UBound(MatrizResultado)
            Celda.Offset(0, i + 1).Value = Trim(MatrizResultado(i))
         Next i
      Next Celda
End Sub

Para implementarlo, sólo tienes que invocarlo desde otro procedimiento y pasarle la celda de interés que quiere que analice desde su argumento en la cabecera.


4 comentarios:

  1. Gracias por compartir lo que sabes, eres una gran persona

    ResponderBorrar
  2. Excelente, gracias por compartir tus conocimientos

    ResponderBorrar
  3. tengo un problema , solicito tu ayuda, tengo en una celda una dirección muy larga, separada por comas, ejemplo
    av, rio la piedad, no 37, Col Viaducto-Piedad, Alcaldía, Venustiano Carranza, CDMX.
    como puedo extrae la Alcaldía y el estado en este caso CDMX, con una formula, ya intente todas, extraer, izquierdo, encontrar y en algunos renglones funciona y en otros me da error , gracias por la atención

    ResponderBorrar