jueves, 27 de octubre de 2016

Calcular Fecha Juliana en Excel

Vamos a explicar como conseguir, a partir de una fecha dada, su equivalente Fecha Juliana...
o al menos lo que está aceptado como fecha juliana, ya que en realidad, la fecha juliana es otra cosa (ver wikipedia).

¿Qué vamos a calcular entonces?, y ¿cuál es el objetivo?.
Lo que entendemos como Fecha Juliana se utiliza a menudo en entornos de fabricación o producción como una marca de tiempo y de referencia rápida para un número de lote o similar, lo que permite al usuario final identificar cuándo se fabricó un producto, y por lo tanto la antigüedad de ese producto.

Existen diferentes variaciones en las Fechas Julianas, pero la más utilizada se compone de dos partes (aaaaddd):
1- aaaa:= un número de cuatro dígitos que representa el año, y
2- ddd:= el número de días transcurridos en dicho año.

Por ejemplo, la fecha de 27/10/2016 en Juliana sería 2016301, ya que desde el 01/01/2016 hasta el 27/10/2016 han pasado 301 días.


Veamos entonces algunas formas de conseguir esta fecha, obviamente todas responden a ese algoritmo.



Una primer fórmula, suponiendo la fecha a convertir en la celda C1:
=TEXTO(C1;"aaaa")&TEXTO((C1-FECHA(AÑO(C1);1;1)+1);"000")

una alternativa sería
=DERECHA(AÑO(C1);4)&TEXTO(C1-FECHA(AÑO(C1);1;0);"000")

una más (todas ellas muy similares):
=TEXTO(C1;"aaaa")&TEXTO((C1 -FECHANUMERO("1/1/"&TEXTO(C1;"aaaa"))+1);"000")

Como podemos comprobar todas responden al mismo cálculo...


Por supuesto también podemos replicar el algoritmo de cálculo con una función personalizada con VBA (una UDF); así insertamos en un módulo estándar de nuestro proyecto de VB el siguiente código:

Function FechaJuliana(fecha As Long) As Long
'convierte una fecha en su correspondiente Fecha Juliana
Dim anyo As Integer, dias As Integer

'obtenemos la primera parte, el año con cuatro dígitos
anyo = Year(fecha)
'calculamos la diferencia de la fecha dada y el primer día del año de estudio
dias = DateDiff("d", DateSerial(anyo, 1, 0), fecha)

'devolvemos el valor compuesto de: aaaaddd
FechaJuliana = Format(anyo, "0000") & Format(dias, "000")

End Function



Empleando esta función en cualquier celda:
=FechaJuliana(C1)

conseguimos el mismo valor...


Notemos que en los primeros casos, el valor devuelto, aparece en formato texto... Para trabajar y poder operar sobre estos resultados conseguidos con fórmulas, bastará anidar lo obtenido en la función VALOR.

4 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. ¡Hola!

      Como texto:
      =AÑO(C1)&C1-FECHA(AÑO(C1);1;)

      Como número:
      =--(AÑO(C1)&C1-FECHA(AÑO(C1);1;))

      Eliminar
    2. Corrijo:

      =AÑO(C1)*10^3+C1-FECHA(AÑO(C1);1;)&""

      Nota: Si se quiere el resultado como número, quitar la concatenación final. ¡Bendiciones!

      Eliminar