Quitar espacio en blanco de una cadena de caracteres y números

Tengo la siguiente cadena:

3         New Vo... Healthy   No        No        29 GB     18 GB         37,93

Y tengo hecha una macro para que me separe el texto (esta cadena está dentro de un texto) por espacios, entonces cuando paso la macro me separa todo el texto bien menos esta cadena que me descuadra todas columnas. Como quiero que me quede es así:

3         NewVo... Healthy   No        No        29 GB     18 GB         37,93

Todo separado como está menos el espacio que hay entre New Vo..., mi pregunta es:

¿Hay alguna manera de quitar automáticamente ese espacio en concreto antes de separar el texto? Así cuándo pase la macro para separar el texto me lo separe todo bien y no me ponga "New" en una columna y "Vo..." en otra.

1 respuesta

Respuesta
1

.16.01.17

Buenas, Alberto

Podrás usar la siguiente fórmula que quita el primer espacio que encuentre, respetando todos los demas. Asumiendo que estuviere en A2, coloca en otra celda, la siguiente fórmula:

=SUSTITUIR(A2;" ";"";1)

[Considera si usas comas o punto y coma para separar argumentos de las funciones. Yo usé ";"]
Asígnale el formato deseado y, luego, copia esta celda y pégala en las restantes de esta misma columna,

Eventualmente, luego podrás aplicar la macro sobre esta columna o puedes copiarla y pegarla como valor sobre la original.

.

¡Muchísimas Gracias! 

Voy a probar lo que me dices, lo que tengo que mirar como lo meto en la macro. Lo único que estoy pensando es que no es el primer espacio el que quiero quitar, es otro número ¿El número de espacio a quitar lo puedo regular con el número de la izquierda? Un saludo!

Perdón me he confundido quería decir:

¿El número de espacio a quitar lo puedo regular con el número de la derecha? Un saludo

.

Correcto, Alberto,

El cuarto argumento de la fórmula indica qué ocurrencia tomar.

Ejemplo:

Eventualmente puedes usar esta subrutina que quita el espacio que le indiques a un listado.

Puedes correrla primero o integrarla a tu procedimiento actual:

Sub quitaEspacioN()
Inicelda = "A2" ' primera celda de rango a modificar
pos = 2 ' ordinal del espacio a quitar  
'  
UltFila = Range(Left(Inicelda, 1) & Rows.Count).End(xlUp).Row
For Fila = 0 To UltFila
If Len(Range(Inicelda).Offset(Fila).Value) Then
    On Error Resume Next
    Range(Inicelda). Offset(Fila).Value = Application. WorksheetFunction. Substitute(Range(Inicelda). Offset(Fila).Value, " ", "", pos)
    Err.Clear
    On Error GoTo 0
End If
Next
End Sub

Espero que te sea de ayuda.

Un abrazo

Fer

.

¡Muchísimas Gracias! 

Buenos días Fer:

He probado el código y funciona perfecto! Pero me ha salido un problema (he adaptado el código para que me busque el patrón en el que quiero quitar el espacio), el espacio me lo quita perfecto en el patrón que le digo, pero no se por que, también me quita espacio en otra fila que no tiene que ver nada con el patrón que le meto (y no se porque pasa esto, por que le pongo que no quite el espacio sino que me pinte la celda y solo pinta la del patrón, pero si le pongo el código de quitar el espacio es cuándo me quita también el espacio de la fila que no tiene patrón) te paso el código y los patrones que me modifica haber si lo solucionamos.

Patrón en el que tiene que quitar el espacio (lo hace perfecto):

3         New Vo... Healthy

Patrón en el que no tiene que quitar el espacio y lo quita (no se por que):

7         vol_me... Healthy 

6         vol_logs  Healthy

Un abrazo y muchas gracias por la ayuda.

Alberto

Perdona Fer que me he dejado de ponerte el código:

Sub quitaEspacioN()


Dim Celda As Range
Dim PALABRA As String

PALABRA = "*" & "3 New Vo... Healthy??????" & "*"
For Each Celda In Range("A1:A999")
If Celda.Value Like PALABRA Then
Celda.Interior.ColorIndex = 35
Inicelda = "A1" ' primera celda de rango a modificar
pos = 10 ' ordinal del espacio a quitar
UltFila = Range(Left(Inicelda, 1) & Rows.Count).End(xlUp).Row
For Fila = 0 To UltFila
If Len(Range(Inicelda).Offset(Fila).Value) Then
On Error Resume Next
Range(Inicelda).Offset(Fila).Value = Application.WorksheetFunction.Substitute(Range(Inicelda).Offset(Fila).Value, " ", "", pos)
Err.Clear
On Error GoTo 0
End If
Next
End If
Next

End sub

.

Hola, Alberto

En tu código noté una redundancia.

Hay dos ciclos For... next

En la rutina que te sugerí, estaba previsto que revisara todas las filas que encontrara en un rango hasta la útlima con dato.

Luego vi que las variables iniciales estaban dentro de ese bucle, lo cual no es necesario.

Por lo tanto, prueba con esta versión modificada:

Sub quitaEspacioN()
Dim Celda As Range
Dim PALABRA As String
Inicelda = "A1" ' primera celda de rango a modificar
pos = 10 ' ordinal del espacio a quitar
PALABRA = "*" & "3 New Vo... Healthy??????" & "*"
UltFila = Range(Left(Inicelda, 1) & Rows.Count).End(xlUp).Row
'For Each Celda In Range("A1:A999") <---- REDUNDANTE  
For Fila = 0 To UltFila
    If Range(Inicelda).Offset(Fila).Value Like PALABRA Then
        Range(Inicelda).Offset(Fila).Interior.ColorIndex = 35
        On Error Resume Next
        Range(Inicelda). Offset(Fila).Value = Application. WorksheetFunction. Substitute(Range(Inicelda). Offset(Fila).Value, " ", "", pos)
        Err.Clear
        On Error GoTo 0
    End If
Next
End Sub

Espero que funcione como necesitas.

Un abrazo

Fer

¡Muchas Gracias! 

Buenas tardes Fer:

Aacabo de probar el código que me pasaste, pero no me quita ningun espacio. He estado haciendo alguna prueba y no he podido encontrar solución... Siempre me quita el espacio como te dije antes (en los dos sitios), es como si no buscara bien el patrón.

Un abrazo

Alberto

.

Buenas, Alberto

Entiendo que el problema puede ser con la cantidad de espacios que está evitando (10!) O porque la escritura de lo que guardas en PALABRA tenga alguna diferencia (por ejemplo mayúsculas o espacios.

Si crees que no es por alguna de esas razones, puedes probar con esta variante del código:

Sub quitaEspacioN()
Dim Celda As Range
Dim PALABRA As String
Inicelda = "A1" ' primera celda de rango a modificar
pos = 10 ' ordinal del espacio a quitar
PALABRA = "3 New Vo... Healthy??????"
UltFila = Range(Left(Inicelda, 1) & Rows.Count).End(xlUp).Row
For Fila = 0 To UltFila
    If InStr(1, Range(Inicelda).Offset(Fila).Value, PALABRA) Then
        Range(Inicelda).Offset(Fila).Interior.ColorIndex = 35
        On Error Resume Next
        Range(Inicelda). Offset(Fila).Value = Application. WorksheetFunction. Substitute(Range(Inicelda). Offset(Fila).Value, " ", "", pos)
        Err.Clear
        On Error GoTo 0
    End If
Next
End Sub

Como verás en este caso, no son necesarios los asteriscos, pues la función evalúa VERDADERO cuando encuentre parcialmente lo que tengas como PALABRA dentro del texto de cada celda.

Espero que ayude a resolverlo.

Un abrazo
Fer

.

¡Muchas Gracias! 

Buenos días Fer:

Ahora no puedo probar el código que me pasas, pero lo pruebo en cuanto pueda y te digo. Gracias por toda la ayuda que me estás prestando.

Un abrazo

Alberto

.

Ok, Alberto

Espero que te funcione.

Alternativamente prueba dejar al variable PALABRA como sigue:

PALABRA = "3 New Vo... Healthy"

es decir, SIN los signos de pregunta

La función SUSTITUIR que te sugerí y que está incluida en la rutina funciona como te expliqué: Quitará el 10 espacio en blanco si lo encuentra, para lo cual primero debe encontrar lo incluido en la variable.

Digo, porque noté que hiciste nuevamente esa consulta (Y obtuviste -de otro experto- la misma respuesta)

Un abrazo

Fer

.

¡Muchas Gracias!

Vale perfecto voy a hacer las pruebas que me dices y te comento. Gracias por preocuparte y ser tan rápido en tus respuestas!

Un abrazo

Alberto 

Buenos días Fer:

Acabo de probar lo que me dices (poner palabra sin los signos de pregunta) y me sigue sin hacer nada, lo siento... Voy a seguir probando haber si encontramos solución ya que sino no puedo seguir con el proyecto.

Un fuerte abrazo

Alberto

Buenos días Fer:

Acabo de encontrar solución al problema, he puesto un if y el nombre lo he cambiado y he puesto el patrón directamente del documento:

Sub quitaEspacioN()
Dim Celda As Range
Dim PALABRA As String
Inicelda = "A1" ' primera celda de rango a modificar
pos = 10 ' ordinal del espacio a quitar
PALABRA = "3         New Vo... Healthy"
UltFila = Range(Left(Inicelda, 1) & Rows.Count).End(xlUp).Row
If PALABRA = PALABRA Then
For Fila = 0 To UltFila
    If InStr(1, Range(Inicelda).Offset(Fila).Value, PALABRA) Then
        Range(Inicelda).Offset(Fila).Interior.ColorIndex = 35
        On Error Resume Next
        Range(Inicelda).Offset(Fila).Value = Application.WorksheetFunction.Substitute(Range(Inicelda).Offset(Fila).Value, " ", "", pos)
        Err.Clear
        On Error GoTo 0
    End If
Next
End If
End Sub

Creo que así me queda solucionado el tema!

Un fuerte abrazo y muchísimas gracias por toda la ayuda.

Alberto

.

Me alegro de que te haya funcionado, eso es lo único importante.

Me parece la solución fue tomar el patrón del documento. Como dije, dependía de cómo estaba escrito y que lo encontrara así para que la sustitución funcione.

El condicional If PALABRA = PALABRA siempre dará verdadero por lo que parecería redundante.

Pero si te funciona...

Saludos

Fer

.

¡Gracias! 

Funciona perfectamente! Así que genial, gracias por toda la ayuda que me has prestado.

Un saludo

Alberto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas