Suprimir cuadraditos en un texto importado
Hola,
Tengo una bases de datos mysql y lo he importado excel mediante una odbc. Una celda contien varios correos electrónicos. Mi objetivo es lograr separar los correos en columnas distintas. El resto de campos se deberán repetir para cada uno de los correos que aparezcan.
El primer problema que surigió es que excel inserta caracteres especiales entre correos electrónicos de la celda. Estoy intentado suprimir los cuadraditos y sustituirlos por comas. Salen dos cuadtraditos entre cada correo electrónico. Encontré esta función en internet:
Dim c
For Each c In Range("A1")
For i = 1 To 31
Application.StatusBar = c.Address & " " & i
On Error Resume Next
Range(c.Address) = Application.Substitute(c, Chr(i), ",")
'Err.Clear
'Resume
Next
Range(c.Address) = Application.Substitute(c, Chr(127), ",")
Range(c.Address) = Application.Substitute(c, Chr(129), ",")
Range(c.Address) = Application.Substitute(c, Chr(141), ",")
Range(c.Address) = Application.Substitute(c, Chr(143), ",")
Range(c.Address) = Application.Substitute(c, Chr(144), ",")
Range(c.Address) = Application.Substitute(c, Chr(157), ",")
Next
Application.StatusBar = False
Solo me funciona con un número limitado de caracteres. Al importar he aumentado el tamaño de la celda para que quepan todos los correos, puede que ese sea el problema.
También me surgió la idea de combinar esta función con la de separa en varias columnas. Para ello encontré esta función en internet:
Range("A1").Select
'Ocultamos el procedimiento para que no se vea en pantalla
'nada de lo que hacemos
Application.ScreenUpdating = False
'Mientras encontremos datos en la fila en cuestión,
'que ejecute el macro
Do While Not IsEmpty(ActiveCell)
'Primero nos fijaremos en qué celda estamos,
'para volver a ella una vez arreglada la fila
dondeestoy = ActiveCell.Address
'Descomponemos la cadena, en subcadenas,
'para lo cual indicamos el delimitador " ", aunque
'por defecto, podríamos haberlo omitido, pues es ese mismo (espacio)
datos = Split(ActiveCell, ",,")
For i = 0 To UBound(datos)
'ponemos cada dato del array, en una columna
ActiveCell.Offset(0, 1) = datos(i)
'nos desplazamos a la columna adyacente (de la derecha)
ActiveCell.Offset(1, 0).Select
Next 'Seguimos con el bucle
'Volvemos donde estábamos inicialmente
Range(dondeestoy).Select
'pasamos a la fila siguiente, y volvemos a recorrer el bucle
ActiveCell.Offset(1, 0).Select
Loop
'Mostramos todo de nuevo
Application.ScreenUpdating = True
No conozco bien como programar en vba. No logro combinar estas dos funciones de eliminar cuadraditos y a la vez dividir en columnas distintas las información.
No se me ocurren más ideas por las que explorar. Habrá seguro otras soluciones.
No se si he logrado explicarme bien,
un saludo y gracias
Tengo una bases de datos mysql y lo he importado excel mediante una odbc. Una celda contien varios correos electrónicos. Mi objetivo es lograr separar los correos en columnas distintas. El resto de campos se deberán repetir para cada uno de los correos que aparezcan.
El primer problema que surigió es que excel inserta caracteres especiales entre correos electrónicos de la celda. Estoy intentado suprimir los cuadraditos y sustituirlos por comas. Salen dos cuadtraditos entre cada correo electrónico. Encontré esta función en internet:
Dim c
For Each c In Range("A1")
For i = 1 To 31
Application.StatusBar = c.Address & " " & i
On Error Resume Next
Range(c.Address) = Application.Substitute(c, Chr(i), ",")
'Err.Clear
'Resume
Next
Range(c.Address) = Application.Substitute(c, Chr(127), ",")
Range(c.Address) = Application.Substitute(c, Chr(129), ",")
Range(c.Address) = Application.Substitute(c, Chr(141), ",")
Range(c.Address) = Application.Substitute(c, Chr(143), ",")
Range(c.Address) = Application.Substitute(c, Chr(144), ",")
Range(c.Address) = Application.Substitute(c, Chr(157), ",")
Next
Application.StatusBar = False
Solo me funciona con un número limitado de caracteres. Al importar he aumentado el tamaño de la celda para que quepan todos los correos, puede que ese sea el problema.
También me surgió la idea de combinar esta función con la de separa en varias columnas. Para ello encontré esta función en internet:
Range("A1").Select
'Ocultamos el procedimiento para que no se vea en pantalla
'nada de lo que hacemos
Application.ScreenUpdating = False
'Mientras encontremos datos en la fila en cuestión,
'que ejecute el macro
Do While Not IsEmpty(ActiveCell)
'Primero nos fijaremos en qué celda estamos,
'para volver a ella una vez arreglada la fila
dondeestoy = ActiveCell.Address
'Descomponemos la cadena, en subcadenas,
'para lo cual indicamos el delimitador " ", aunque
'por defecto, podríamos haberlo omitido, pues es ese mismo (espacio)
datos = Split(ActiveCell, ",,")
For i = 0 To UBound(datos)
'ponemos cada dato del array, en una columna
ActiveCell.Offset(0, 1) = datos(i)
'nos desplazamos a la columna adyacente (de la derecha)
ActiveCell.Offset(1, 0).Select
Next 'Seguimos con el bucle
'Volvemos donde estábamos inicialmente
Range(dondeestoy).Select
'pasamos a la fila siguiente, y volvemos a recorrer el bucle
ActiveCell.Offset(1, 0).Select
Loop
'Mostramos todo de nuevo
Application.ScreenUpdating = True
No conozco bien como programar en vba. No logro combinar estas dos funciones de eliminar cuadraditos y a la vez dividir en columnas distintas las información.
No se me ocurren más ideas por las que explorar. Habrá seguro otras soluciones.
No se si he logrado explicarme bien,
un saludo y gracias
2 respuestas
Respuesta de edwinhenao
1
Respuesta de prozac
1