Ajuste de fecha y hora

Hola a todos.
Soy nuevo por aquí, de antemano muchas gracias a los que me puedan ayudar. Lo que me ocurre es lo siguiente.
Me gustaría saber si puedo puedo introducir un dato en una celda de excel, de forma que ese dato se me traduzca en la hora:minutos, es decir, por ejemplo pongo 2045 y se refleje --> 20:45; o pongo 1515 y me salga 15:15. Todo esto viene porque recojo una serie de datos de un Autómata, pero la hora:minutos me la entrega de la forma que os he dicho (2045 por ejemplo para las 20:45), y necesitaría verla con los dos puntos. He estado echando un vistazo en Formato de celdas/hora... Pero claro, al ser un número lo que se introduce en la celda, el Excel lo transforma en una fecha, por ejemplo, al poner 2045 y el Formato de celda estar en Numero/Hora, el excel devuelve "06/08/1905 0:00:00". Lo mismo me gustaría aplicar a las fechas, es decir, el Autómata me arroja el día de hoy como 220811 (22 de agosto de 2011) y al poner en formato de celdas/numero/fecha, el excel me da "22/07/2504".
Espero que alguien me pueda ayudar y decirme como solucionarlo y espero haberme explicado con claridad.
Sin más, saludos a todos!
Eduardo Cabrera

1 Respuesta

Respuesta
1
Lo puedes arreglar con un macro que recorra los rangos y concatene las cadenas con la cadena ":"
Preguntas:
¿El autómata te pasa automáticamente los datos a la hoja excel?... ¿En qué rangos?
( Columna fecha y columna hora y desde que fila comienzan)
¿Siempre tiene el mismo largo? (¿4 caracteres para la hora y 8 para fecha?)
Ups se me paso
Para la fecha es importante saber largo de cadena, según modelo 200811 seria 6 caracteres pero como te entrega las fechas para días menores al 10, ¿es decir 010811 o 10811?
Gracias por responder tan rapido.
Sí, el Autómata envía los datos directamente a la hoja excel. Se envían las fechas siempre a la primera casilla de la columna "A" que hay libre y lo mismo para la hora con la columna "B". Y la fecha siempre son 6 dígitos (010811 por ejemplo) y la hora 4 dígitos (0645 por ejemplo).
El problema es que con el tema de las macros voy flojillo...
Gracias nuevamente. Saludos.
Veamos entonces. Desde el libro de excel que procedaras los datos presina las teclas ALT + F11
Se abrirá el editor de visual basic para excel. Por lo general al costado izquierdo esta la barra de objetos del proyecto, allí encuentras las hojas del libro, sus módulos ( si es que tienes otras macros), formularios, etc.
Ve al menu insertar y selecciona "modulo" NO modulo de clase, solo "modulo". Una vez insertado el objeto modulo, dale doble click. Seabrira la ventana de edición del modulo. Allí pegas este macro:
Sub ajuste()
Dim r As Range
Dim f As Integer
f = Application.WorksheetFunction.CountA(Range("A:A"))
If f = 0 Then Exit Sub
Application.ScreenUpdating = False
For Each r In Range("A1" & ":" & "A" & f)
If InStr(1, r.Text, ":") = 0 Then
r = Mid(r, 1, 2) & ":" & Mid(r, 3, 2)
If Len(r.Offset(0, 1)) = 5 Then r.Offset(0, 1) = CDate(Mid(r.Offset(0, 1), 2, 2) & "-" & Mid(r.Offset(0, 1), 1, 1) & "-20" & Mid(r.Offset(0, 1), 4, 2))
If Len(r.Offset(0, 1)) = 6 Then r.Offset(0, 1) = CDate(Mid(r.Offset(0, 1), 1, 2) & "-" & Mid(r.Offset(0, 1), 3, 2) & "-20" & Mid(r.Offset(0, 1), 5, 2))
End If
Next
Set r = Nothing
Application.ScreenUpdating = True
MsgBox "Formato ajustado", vbInformation
End Sub
Grabas el libro y cierras el editor y ya esta, tienes tu macro llamado "ajuste".
Lo corres como cualquier macro con teclas ALT + F8, y seleccionas el nombre del macro
Debes tener datos en col a y b
No olvides CERRAR la pregunta
Hola Experto,
Muchas gracias por la respuesta. Lo he probado y va bien, sólo me queda una última pega. Cuando ejecuto la macro, se ajusta y se pone ":" en medio de los números. Que sucede, que toda la columna (no se si ocurre de forma automática o es porque tú lo indicaste así en la macro) se pone con Formato de celdas/Hora, y en la siguiente lectura de la hoja excel al Autómata, cuando el autómata vuelva a enviar los datos en forma "1645" o "1130"... el excel coge esos nuevos valores y los pone a "0:00" por el formato que contiene la columna... no se si me he explicado bien. En definitiva, que serviría para un primer ajuste, pero los posteriores todos los valores de hora salen a "0:00" :S
Perdona las molestias y muchas gracias.
Saludos
Mmm eso debe ser por que pasamos el valor como tipo fecha, entonces quítale el cdate a las lineas del bucle quedaría así:
If Len(r.Offset(0, 1)) = 5 Then r.Offset(0, 1) = (Mid(r.Offset(0, 1), 2, 2) & "-" & Mid(r.Offset(0, 1), 1, 1) & "-20" & Mid(r.Offset(0, 1), 4, 2))
If Len(r.Offset(0, 1)) = 6 Then r.Offset(0, 1) = (Mid(r.Offset(0, 1), 1, 2) & "-" & Mid(r.Offset(0, 1), 3, 2) & "-20" & Mid(r.Offset(0, 1), 5, 2))

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas