Red de conocimiento informático - Material del sitio web - Código fuente de la fórmula maestra

Código fuente de la fórmula maestra

Esta es una fórmula para convertir el calendario lunar al calendario gregoriano, pero debido a la complejidad del calendario lunar, especialmente la presencia de meses bisiestos, es más difícil completarlo con una fórmula más simple.

El texto con "$-130000]AAAA-M-D" es para convertir el calendario gregoriano al calendario lunar. Pero este parámetro [$-130000] en particular tiene limitaciones y el resultado de la conversión puede ser incorrecto.

La idea de la fórmula es: sacar el año en P7, usar FECHA y FILA para formar una matriz, los años desde 65438+1 de octubre hasta 65438+31 de febrero:

ROW( INDIRECT(DATE(LEFT(P7, 4), 1, 1)& ":" & ampDATE(LEFT(P7, 4), 12, 31)))

Luego use el parámetro [ $-130000]AAAA-M-D "Convierte todas las fechas del año al calendario lunar.

Si se juzga si la fecha del calendario lunar convertida es igual a P7. Si la fecha del calendario lunar en P7 es no está cerca del final del año, entonces debe haber una y solo una fecha gregoriana con el mismo año lunar que la fecha lunar en P7. Todas las demás fechas diferentes se dejan en blanco. El resultado de IF es: un número (calendario gregoriano). día) y 364 (el año del calendario gregoriano es 365) espacios (""), y luego use 1 como decimal para extraer este número único. De hecho, puede ser más fácil de entender usando

Si. el calendario lunar está cerca del final del año, como el séptimo día de diciembre en la pregunta, el año después de la conversión al calendario gregoriano es el año siguiente, que es 2000 para la pregunta. Luego convierta los 365 días de 1999. en el calendario lunar, que es diciembre de 1998. hasta la fecha de noviembre de 199. No hay una fecha como P7. El resultado es #NUM. Por lo tanto, se usa IFERROR en la fórmula y el segundo PEQUEÑO se usa para encontrar la fecha gregoriana. En este caso, el año es el año siguiente, por lo que la fórmula es básicamente la misma que 1, excepto que al número de año de P7 se le suma 1. Depende de qué día de 2000 se convierta al calendario lunar y sea el mismo. como P7, de 65438+1 de octubre a 65438+ No es necesario comparar el 31 de febrero, el segundo mes del año. mes no excederá los 2 meses en el calendario lunar

Según el análisis anterior, utilizar la siguiente fórmula no sólo es mucho más sencillo, sino también más fácil de entender:

=BUSCAR. (-P7,-TEXT(P7+ROW(10:60),"[$-130000]yyyy-m-d " ), P7+ROW(10:60))

La idea del La fórmula es comenzar desde la fecha en P7, trabajar hacia atrás de 10 a 60 días, convertir las fechas en este rango en fechas lunares y luego usar BUSCAR. Encuentre la posición de P7 en estas fechas convertidas y devuelva la fecha correspondiente del calendario gregoriano. En cualquier caso, la fecha del calendario gregoriano no puede ser dentro de los 10 días, ni puede ser 60 días después del calendario lunar, por lo que la fórmula puede garantizar que no habrá fórmula #NUM ¡La cantidad es menor que 1/12 de la fórmula original! La fórmula original anida IF y SMALL, lo que consume muchos recursos. Sin embargo, esta fórmula utiliza BUSCAR, que es una búsqueda binaria, por lo que la eficiencia de esta fórmula es al menos dos órdenes de magnitud mayor que la fórmula original.

Por cierto, hay muchas introducciones en Internet sobre la conversión del calendario solar y el calendario lunar. La fórmula utilizada en este problema es una de ellas, es relativamente simple y tiene un solo texto. parámetro de formato. Pero también es difícil garantizar la precisión. Entre los métodos que he visto, es más confiable enumerar la fecha del calendario gregoriano correspondiente al primer día de cada duodécimo o decimotercer mes del calendario lunar en un año posible. Esto se puede garantizar utilizando BUSCARV junto con otras funciones. La precisión de los resultados de la consulta.

Espero que el análisis anterior pueda ayudarte a interpretar la fórmula. Por supuesto, el análisis anterior supone que tiene los conocimientos más básicos de FECHA, PEQUEÑO, TEXTO y otras funciones, por lo que no es necesario analizar la FECHA y otras funciones en detalle paso a paso.