Imprimir página | Cerrar ventana

Pasar texto a fecha (otra vez)

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86181
Fecha de impresión: 26/Marzo/2026 a las 18:58


Tema: Pasar texto a fecha (otra vez)
Publicado por: acilu55
Asunto: Pasar texto a fecha (otra vez)
Fecha de publicación: 01/Diciembre/2021 a las 10:28

Este es un tema ya tratado y que creía resuelto, pero que me ha estado dando resultados erróneos durante mucho tiempo y me he dado cuenta ahora:

se trata de una columna de fecha en que al crearla con determinado programa excel reconoce el formato dd/mm/aaaa como texto u no como fecha.

Yo utilizaba este codigo:
sub p1()

dim ult as integer
ult=Cells(Rows.count, 1).End(xlUp).Row

for n = 2 to ult
celdilla= "g"& n
v1= Range(celdilla).Value
Range(celdilla).Value=Left(v1, 10)
next
end sub

de resultado obtenía que un 30% de las celdas toman el formato de fecha y se alinean a la derecha pero el resto siguen siendo texto alineado a la izquierda.

En la anterior consulta en el foro Xavi  me paso  este código

Dim i As Integer
    Dim arrFecha As Variant
    i = 2
    Cells(i, 7).Select
    Do Until ActiveCell = ""
        arrFecha = Split(ActiveCell, "/")
        ActiveCell.Value = DateSerial(CInt(arrFecha(2)), CInt(arrFecha(1)), CInt(arrFecha(0)))
        i = i + 1
        Cells(i, 7).Select
    Loop
End Sub

En este cado todo se alinea a la derecha y tienen fprmato de fechas, pero...
las mismas fechas ue antes no convertía ahora las traduce en formato mm/dd/aaaa y son concretamente los dias de mes anteriores al 12, este incluido, de manera que me coloca el dia uno en enero, el dos en febrero etc y todos así hasta el 12 en diciembre y con el mismo día: el del mes correspondiente.

No logro averiguar ue me pasa 
¿ALGUien tiene alguna idea de donde estará el quiz?
gracias de antemano



-------------
Gracias a todos de antemano



Respuestas:
Publicado por: lbauluz
Fecha de publicación: 01/Diciembre/2021 a las 12:45
Prueba algo así:

sub p2()
  dim ult as integer
  ult=Cells(Rows.count, 1).End(xlUp).Row
  Range("G2", "G" & ult).Select         'Selecciona solo el rango de datos en columna G
  Selection.NumberFormat = "dd/mm/yyyy" ' Cambia al formato que quieres
End sub


-------------
El Búho es un pajarraco


Publicado por: acilu
Fecha de publicación: 01/Diciembre/2021 a las 12:46
esto es curioso y noen cuentro el fallo:
si la funcion es el código de xavi funciona

sub p1()
Dim i As Integer
    Dim arrFecha As Variant
    i = 2
    Cells(i, 7).Select
    Do Until ActiveCell = ""
        arrFecha = Split(ActiveCell, "/")
        ActiveCell.Value = DateSerial(CInt(arrFecha(2)), CInt(arrFecha(1)), CInt(arrFecha(0)))
        i = i + 1
        Cells(i, 7).Select
    Loop
End Sub

si la junto co el resto que necesito para no hacer dos funciones deja de funcionar

Sub p1()
Dim ult As Integer

ult = Cells(Rows.Count, 1).End(xlUp).Row

For n = 2 To ult

celdilla = "g" & n
v1 = Range(celdilla).Value
Range(celdilla).Value = Left(v1, 10)

Select Case Left(Range("a" & n).Value, 2)
Case Is = "LE"
Range("a" & n).Value = "León"
Case Is = "PA"
Range("a" & n).Value = "Palencia"
Case Is = "PO"
Range("a" & n).Value = "Ponferrada"
Case Is = "SA"
Range("a" & n).Value = "Salamanca"
Case Is = "ZA"
Range("a" & n).Value = "Zamora"
End Select

Next

Dim i As Integer
    Dim arrFecha As Variant
    i = 2
    Cells(i, 7).Select
    Do Until ActiveCell = ""
        arrFecha = Split(ActiveCell, "/")
        ActiveCell.Value = DateSerial(CInt(arrFecha(2)), CInt(arrFecha(1)), CInt(arrFecha(0)))
        i = i + 1
        Cells(i, 7).Select
    Loop
End Sub

en principio son dos cosas diferentes y haga primero una coso o la otra, el error de que los doce primeros dias de mes cambia meses por dias se produce sin que logre averiguar porque.


Publicado por: sdgm
Fecha de publicación: 01/Diciembre/2021 a las 16:55
Hola, Acilu.

Como comenta Lbauluz, pareciera que el problema se origina en los formatos de fecha de Excel.  ¿Podrías mostrar algunas de las fechas que se interpretan bien y otras que no, para que tengamos una idea más clara de tu problema?


-------------
Cordialmente, David


Publicado por: acilu
Fecha de publicación: 01/Diciembre/2021 a las 19:52
en la tabla original tiene este texto
12/11/2021
12/11/2021
12/11/2021
12/11/2021
12/11/2021
12/11/2021
12/11/2021
12/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
el resultado despues de pasar el codigo es
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021

como veis en los que el dia es menor o igual a 12  ha tomado el día por el mes, a partir del déa 13 todo esta bien, en noviembre 13 y 14 fueron s,abado y domingo, por lo ue no hay registros en esas fechas.



Publicado por: acilu
Fecha de publicación: 01/Diciembre/2021 a las 20:04
con el códifo de Ibauluz
sub p2()
  dim ult as integer
  ult=Cells(Rows.count, 1).End(xlUp).Row
  Range("G2", "G" & ult).Select         'Selecciona solo el rango de datos en columna G
  Selection.NumberFormat = "dd/mm/yyyy" ' Cambia al formato que quieres
End sub

ocurre tambien algo raro: los dias menores del 13 los pone todos el dia once y la meses 1,2,3 etc en formato fecha, pero los días mayores de 12 no los convierte en fechas. resultado:

11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
11/12/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021
15/11/2021

las fechas las alinea a la derecha y los textos siguen estando a la izquierda.

Por si sirve uso Excel385.  el numero de filas totales  del mes de noviembre son 1200 y el cambio de fecha en la fila  768



Publicado por: sdgm
Fecha de publicación: 01/Diciembre/2021 a las 21:19
Prueba con la siguiente modificación a tu código:

Sub ConvertirFechas()
    Dim ult As Integer
    ult = Cells(Rows.Count, 1).End(xlUp).Row
    
    For n = 2 To ult
        celdilla = "g" & n
        v1 = Range(celdilla).Value
        Range(celdilla).NumberFormat = "dd/mm/yyyy"
        Range(celdilla).Value = CDate(Left(v1, 10))
    Next
End Sub

Si esto te funciona, podría optimizarse tu código para que sea más rápido (aunque sea más largo de escribir) a lo siguiente:

Sub ConvertirFechas2()
    Dim ult As Integer, Celda As Range
    ult = Cells(Rows.Count, 1).End(xlUp).Row
    With Range(Cells(2, 7), Cells(ult, 7))
        .NumberFormat = "dd/mm/yyyy"
        .Interior.ColorIndex = -4142
        For Each Celda In .Cells
            Celda.Value = CDate(Left(Celda.Value, 10))
        Next Celda
    End With
End Sub

Por favor, comenta cómo te fue...




-------------
Cordialmente, David


Publicado por: acilu55
Fecha de publicación: 02/Diciembre/2021 a las 09:41
sdgm: funcionan correctamente las dos funciones, pero al colocarlas con el resto volvian a no funcionar. 
asi que el error venia de las lineas anteriores de código, concretamente al quitar

celdilla = "g" & n
v1 = Range(celdilla).Value
Range(celdilla).Value = Left(v1, 10)

todos los codigos que me habeis propuesto funcionan correctamente.
Muchas gracias por vuestra ayuda y perdonar mi impericia, tenia ue habarlo visto antes



-------------
Gracias a todos de antemano


Publicado por: lbauluz
Fecha de publicación: 02/Diciembre/2021 a las 09:54
Publicado originalmente por acilu55 acilu55 escribió:

Muchas gracias por vuestra ayuda y perdonar mi impericia, tenia ue habarlo visto antes


Al contrario, estamos aquí precisamente para eso, 20 ojos ven más que 2.

Cierro el hilo


-------------
El Búho es un pajarraco



Imprimir página | Cerrar ventana