Pasar texto a fecha (otra vez) |
Responder |
Autor | ||||||||||||||||||||||||||||||
acilu55
Asiduo Unido: 27/Septiembre/2011 Estado: Sin conexión Puntos: 214 |
Tema: Pasar texto a fecha (otra vez) Enviado: 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
|
||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
Enviado: 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
|
||||||||||||||||||||||||||||||
acilu
Habitual Unido: 11/Enero/2007 Localización: Zamora Estado: Sin conexión Puntos: 146 |
Enviado: 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.
|
||||||||||||||||||||||||||||||
sdgm
Colaborador Unido: 21/Abril/2005 Localización: Guatemala Estado: Sin conexión Puntos: 928 |
Enviado: 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
|
||||||||||||||||||||||||||||||
acilu
Habitual Unido: 11/Enero/2007 Localización: Zamora Estado: Sin conexión Puntos: 146 |
Enviado: 01/Diciembre/2021 a las 19:52 | |||||||||||||||||||||||||||||
en la tabla original tiene este texto
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. |
||||||||||||||||||||||||||||||
acilu
Habitual Unido: 11/Enero/2007 Localización: Zamora Estado: Sin conexión Puntos: 146 |
Enviado: 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:
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 |
||||||||||||||||||||||||||||||
sdgm
Colaborador Unido: 21/Abril/2005 Localización: Guatemala Estado: Sin conexión Puntos: 928 |
Enviado: 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
|
||||||||||||||||||||||||||||||
acilu55
Asiduo Unido: 27/Septiembre/2011 Estado: Sin conexión Puntos: 214 |
Enviado: 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
|
||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
Enviado: 02/Diciembre/2021 a las 09:54 | |||||||||||||||||||||||||||||
Al contrario, estamos aquí precisamente para eso, 20 ojos ven más que 2. Cierro el hilo
|
||||||||||||||||||||||||||||||
El Búho es un pajarraco
|
||||||||||||||||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |