Eliminar espacios en blanco

08/06/2005 - 03:15 por AndreaC | Informe spam
Tengo una planilla con varias columnas y muchas filas. Todas las celdas
contienen textos de distintas longitudes.
Necesito programar una macro que elimine los espacios que sobran (dobles
espacios y espacios al incio o final del texto) de una celda o de un rango.
Ya se como utilizar la funcion "Trim" o "Espacios", pero quisiera tener una
macro que se ejecute sobre la misma celda, sin necesidad de una columna
auxiliar.
Es posible hacerlo?
Muchas gracias!
An.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/06/2005 - 06:08 | Informe spam
hola, Andrea !

... varias columnas y muchas filas... contienen textos de distintas longitudes.
... macro que elimine los espacios que sobran (dobles... al incio o final...) de una celda o de un rango.
... se como utilizar la funcion "Trim" o "Espacios"... quisiera... una macro... sin necesidad de una columna auxiliar.



prueba con alguna de las siguientes opciones de codigo en un modulo 'normal'...
requieren [o suponen] que la seleccion 'actual' SEA una celda o rango de celdas ->NO 'objetos'<-
saludos,
hector.
__ op1 __
Sub RemoverEspaciosExtra()
Selection = Application.Trim(Selection.Value)
End Sub
pros: [mas que]... 'sencilla' ;)
cons: si alguna celda dentro de la seleccion ES formula... se 'auto-convierte' a su resultado como 'constante' :-(
__ op2 __
Sub RemoverEspaciosExtra()
With Selection.SpecialCells(xlCellTypeConstants)
.Value = Application.Trim(.Value)
End With
End Sub
pros: [sigue siendo]... 'sencilla' Y 'omite' las celdas que tengan formula
cons: si son varios rangos 'discontinuos'... los 'segundos' rangos 'tomaran' TODOS el valor ->de la primer celda<- <= OJO
[la anterior tiene el mismo 'problema/comportamiento/...'] :-((
__ op3 __
Sub RemoverEspaciosExtra()
Dim Celda As Range
For Each Celda In Selection
If Not Celda.HasFormula Then Celda = Application.Trim(Celda)
Next
End Sub
pros: [parece que]... 'resuelve' los problemas de las anteriores ;)
cons: el 'barrido' de las celdas es ->una por una<- [pudiera resultar 'lento' el proceso] -?-
Respuesta Responder a este mensaje
#2 AndreaC
09/06/2005 - 01:39 | Informe spam
Mil gracias, Hector.
Me funciono muy bien la tercera alternativa. Pero tal como dijiste, se demora.
Si tienes alguna idea de como mejorar la macro para que no demore tanto, te
lo agradeceria mucho (no es urgente).
Saludos
An.

"Héctor Miguel" wrote:

hola, Andrea !

> ... varias columnas y muchas filas... contienen textos de distintas longitudes.
> ... macro que elimine los espacios que sobran (dobles... al incio o final...) de una celda o de un rango.
> ... se como utilizar la funcion "Trim" o "Espacios"... quisiera... una macro... sin necesidad de una columna auxiliar.

prueba con alguna de las siguientes opciones de codigo en un modulo 'normal'...
requieren [o suponen] que la seleccion 'actual' SEA una celda o rango de celdas ->NO 'objetos'<-
saludos,
hector.
__ op1 __
Sub RemoverEspaciosExtra()
Selection = Application.Trim(Selection.Value)
End Sub
pros: [mas que]... 'sencilla' ;)
cons: si alguna celda dentro de la seleccion ES formula... se 'auto-convierte' a su resultado como 'constante' :-(
__ op2 __
Sub RemoverEspaciosExtra()
With Selection.SpecialCells(xlCellTypeConstants)
.Value = Application.Trim(.Value)
End With
End Sub
pros: [sigue siendo]... 'sencilla' Y 'omite' las celdas que tengan formula
cons: si son varios rangos 'discontinuos'... los 'segundos' rangos 'tomaran' TODOS el valor ->de la primer celda<- <= OJO
[la anterior tiene el mismo 'problema/comportamiento/...'] :-((
__ op3 __
Sub RemoverEspaciosExtra()
Dim Celda As Range
For Each Celda In Selection
If Not Celda.HasFormula Then Celda = Application.Trim(Celda)
Next
End Sub
pros: [parece que]... 'resuelve' los problemas de las anteriores ;)
cons: el 'barrido' de las celdas es ->una por una<- [pudiera resultar 'lento' el proceso] -?-



Respuesta Responder a este mensaje
#3 Héctor Miguel
09/06/2005 - 04:11 | Informe spam
hola, Andrea !

... la tercera alternativa... como dijiste, se demora alguna idea de como mejorar... para que no demore tanto



-> un primer paso seria inhibir el 'refresco de la pantalla' [durante la ejecucion del procedimiento]
-> otra posibilidad es 'omitir de golpe' las celdas que contengan formulas para agilizar 'el barrido'
[suponiendo que el/los rango/s seleccionado/s incluyen celdas con formulas]
__ op4 __
Sub RemoverEspaciosExtra()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Selection.SpecialCells(xlCellTypeConstants)
Celda = Application.Trim(Celda)
Next
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#4 AndreaC
09/06/2005 - 15:51 | Informe spam
Perfecto! Mil gracias!
Ahora demora menos.
Saludos
An.

"Héctor Miguel" wrote:

hola, Andrea !

> ... la tercera alternativa... como dijiste, se demora alguna idea de como mejorar... para que no demore tanto

-> un primer paso seria inhibir el 'refresco de la pantalla' [durante la ejecucion del procedimiento]
-> otra posibilidad es 'omitir de golpe' las celdas que contengan formulas para agilizar 'el barrido'
[suponiendo que el/los rango/s seleccionado/s incluyen celdas con formulas]
__ op4 __
Sub RemoverEspaciosExtra()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Selection.SpecialCells(xlCellTypeConstants)
Celda = Application.Trim(Celda)
Next
End Sub

saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida