martes, 17 de abril de 2018

Hora superior a 10.000

Un usuario preguntaba, en un comentario, por la forma de trabajar cuando la hora superara las 10.000
[...]como puedo hacer que se pueda llevar acabo una operación de mas de 10 mil horas?[...]


Es importante conocer nuestra herramienta de trabajo -Excel-, y sus limitaciones.
En concreto el que afecta al:
Período de tiempo máximo que puede escribirse:= 9999:59:59

Puedes ver algunas más aquí o aquí.


Por tanto la hora máxima que se puede escribir son las 9999:59:59.
Es importante subrayar la palabra 'escribir'.. ya que en realidad a través de operaciones o fórmulas podremos trabajar y reconocer como 'hora máxima' las:
71003183:59:59
hora que equivale a la fecha máxima reconocida por Excel:
31/12/9999 23:59:59


Y en esta parte es donde reside la solución para trabajar o escribir una hora superior a la reconocida (9999:59:59), será a través de cálculos.

Veamos un ejemplo, donde sumé varias celdas con horas, que en total exceden del límite de las 10000 horas. Como se ve en la imagen se suma correctamente y se devuelve el dato correcto:

Hora superior a 10.000



En eso consistirá nuestro trabajo, en operar sobre la hora a escribir, para obtenerla a partir de un cálculo, y luego sencillamente aplicarle un formato tipo: [h]:mm:ss.

De hecho, en una celda podríamos escribir:
=10000/24+1/24/60+1/24/60/60
y tras aplicarle el formato indicado, veríamos la hora:
10000:01:01


Extrapolamos ese cálculo, y creamos una UDF que trabajará de forma parecida a la función
NSHORA
o la función
FECHA

Así pues, en un módulo estándar del libro incluimos el siguiente procedimiento Function:

Function Horas10000(hora As Double, _
                    minunto As Double, _
                    segundo As Double) As Double
                        
Dim hr As Double, min As Double, sec As Double
'convertimos a decimal las horas, minutos y segundos...
'dividimos por 24 por que tomamos como base el formato de [h]:mm:ss
'que permite incrementar el número de horas por días completos
If hora >= 24 Then
    hr = hora / 24
    min = (minunto / 24) / 60
    seg = ((segundo / 24) / 60) / 60
Else
    'por si acaso el número de hors total no excede de las 24 horas...
    hr = hora
    min = minunto / 60
    seg = (segundo / 60) / 60
End If
'y finalmente devolvemos a la celda la suma
'que corresponderá con el valor buscado...
Horas10000 = hr + min + seg
End Function



Podemos comprobar como introduciendo en una celda, por ejemplo, B8 la fórmula:
=Horas10000(10000;1;1)
obtenemos la hora buscada:
10000:01:01

Solución encontrada...

No hay comentarios:

Publicar un comentario