Código para reemplazar el . Por diagonal fechas

Tengo el siguiente código para reemplazar el punto por diagonal. Pero cuando encuentra (:) dos puntos también los reemplaza

TenSub CambiaSign()
'---- Variables modificables:
'=== ROSY, modifica estos datos de acuerdo a tu proyecto:
CeldaIN = "E14"
Buscar = "."
CambiarPor = "/"
'---- fin Variables
'
'---- inicio de rutina:
'
Range(CeldaIN).CurrentRegion.NumberFormat = "@"
Range(CeldaIN).CurrentRegion.Replace What:=Buscar, Replacement:=CambiarPor, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

1 respuesta

Respuesta
1

.

Buenos días, Rosy

Como autor de esa rutina, puedo asegurarte que no reemplaza los :

A lo sumo, puede ser que tengas horas con formato HH:MM y al reemplazar el . pierdas ese valor. Pero no sé...

¿O quieres que también reemplace los dos puntos por la barra?

En tal caso, una variante de aquella rutina, reemplazará el punto y los dos puntos por /

Sub CambiaSign()
'---- Variables modificables:
'=== ROSY, modifica estos datos de acuerdo a tu proyecto:
CeldaIN = "E14"
Buscar = "."
CambiarPor = "/"
'---- fin Variables
'
'---- inicio de rutina:
' 
Range(CeldaIN).CurrentRegion.NumberFormat = "@"
Range(CeldaIN).CurrentRegion.Replace What:=Buscar, Replacement:=CambiarPor, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Buscar = ":"
Range(CeldaIN).CurrentRegion.Replace What:=Buscar, Replacement:=CambiarPor, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

En caso de que yo no te hubiese entendido, por favor aclárame cuál es el inconveniente que tienes.

Saludos
Fernando

.

Si son horas las que también esta reemplazando en donde están los 7:00

.

Me lo presentía...(O me "latía" que estaba pasando eso)

El tema es así: MS Excel maneja las horas como fracción de 1 dia.

Es decir que una hora es 1/24 = 0.04166667, luego Excel le de da "formato" 01:00

Si tienes una celda con una hora y le borras el formato verás que queda un numero decimal como el de arriba. Esto pasará con cualquier número decimal.

En otras palabras, no hay físicamente dos puntos en esa celdas. Pero al reemplazar el . por la / deja de ser una hora válida y desaparece.

La solución es limitar el reemplazo a las columnas que NO tengan esas horas.

Por ejemplo, si quieres que los reemplazos se hagan solo en las columnas E y G, usa esta variante de aquel código:

Sub CambiaSign()
'---- Variables modificables:
'=== ROSY, modifica estos datos de acuerdo a tu proyecto:
ElRango = "E:E,G:G"
Buscar = "."
CambiarPor = "/"
'---- fin Variables
'
'---- inicio de rutina:
'
Range(ElRango).NumberFormat = "@"
Range(ElRango).Replace What:=Buscar, Replacement:=CambiarPor, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

Pruebalo y dime si funciona bien.

Saludos

Fernando

.

Range("E:E,G:G")

Muchísimas gracias me ayudo era lo que buscaba

.

Me alegro, Rosy.

Un placer ayudarte.

Por favor, recuerda cerrar y valorar ambas preguntas, para que otros puedan consultarme.

Saludos

Fer

.

Creo que me salio otro error.. al momento de hacer el cambio por ejemplo si tengo 01/10/2016 me cambia a 10/01/2016

.

Buenos días, Rosy

En realidad ese problema es ajeno a la rutina.

Tiene que ver con el formato de fecha que asignes a la celda.

Para volver a la fecha que buscas cambia el formato a fecha: dd/mm/yyyy

o, si todos los datos de tus columnas E y D son fechas usa reemplaza esta instrucción que estaba en tu código original:

Range(ElRango).NumberFormat = "@"

por esta otra:

Range(ElRango). NumberFormat = "dd/mm/yyyy"

Espero que esto resuelva tu problema

Saludos

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas