¿Fórmula del calendario solar al calendario lunar en Excel?
Solo puedes considerar usar la programación VBA para personalizar una función.
Figura 1: Diagrama de visualización de efectos:
Diagrama de visualización de efectos
Figura 2: Diagrama de pasos:
Diagrama de pasos
Figura 3: Diagrama de código completo:
Pasos:
1. formato xlsx, debe guardarse como un libro habilitado para macros. formato xlsm.
2. Presione Alt F11 para abrir el editor de código.
3. Haga clic en "Insertar"-"Módulo",
4. Haga doble clic en el módulo en la columna de la izquierda.
5. Pega el código en el área de edición de la derecha.
6. Al informar un error, verifique si el código se vuelve rojo.
7. Cierra el editor de código.
Importante:
Descripción 1. Para el código copiado desde aquí, Baidu insertará líneas en blanco adicionales entre líneas. Si el código se vuelve rojo debido a errores, puede eliminar las líneas en blanco entre líneas.
Nota 2. Este código tampoco es una panacea. Está limitado por rango de fechas. Sólo se puede convertir del primer día del primer mes lunar de 1921 al trigésimo día del duodécimo mes lunar de 2100. El rango correspondiente del calendario gregoriano es de 1921/2/8 a 2100/2.
Nota 3. Al utilizar fórmulas en una tabla, puede indicar la fecha directamente en la fórmula o puede hacer referencia a la fecha en una celda.
Ejemplo 1, fecha de conversión específica:
=iNlStr(date(2020, 8, 18))
Ejemplo 2, convertir para siempre la fecha de hoy: p>
=iNlStr(TODAY())
Ejemplo 3, convertir desde la fecha de referencia de la celda:
=iNlStr(A1)
Código como sigue , para que copie:
Opción explícita
'Public tf as boolean'
Public sZhouJ as variante 'week array'
Variación de "Ten Heavenly Stem Array"
Public sDiZhi es una variante de 'Twelve Branch Array'
Public sSXiao es una variante de 'Zodiac Array'
sNlMon público como variante "Lunar Month Array"
Día público como variante "Lunar Day Array"
SNlShu público como variante "Moon Data Array"
p>Subcargar matriz()
SZhouJ = Split("*/一/二/三/四/五/六/DAY","/")week array
STiGan = Split( " A/B/C/D/E/F/G/F/N/D ", "/") Matriz TiGan.
SDiZhi = Split("Zi/Chou/Yin/Mao/Chen/Si/Wu/Wei/Shen/You/Xu/Hai", "/)'Formación Geocéntrica
SSXiao = Split("Rata/Buey/Tigre/Conejo/Dragón/Serpiente/Caballo/Oveja/Mono/Pollo/Perro/Cerdo","/)' Zodiac Array
SNlMon = Split("* / Primer mes/febrero/marzo/abril/mayo/junio/julio/agosto/septiembre/octubre/invierno/duodécimo mes", matriz de meses "/") p>
sNlDay = Split( _
" */Grado 1/2/3/4/5/6/7/8/9/10 " u
amp "/Once/Doce/Trece/Catorce/Quince/Dieciséis/Diecisiete /Dieciocho/Diecinueve/Veinte"
amp"/21/22/23/24/ 25/26/27/28/29/30", "/""
sNlShu = Dividir(_
" 002635/333387/001701/001748/267701/000694/002391 /133423/01175/396438/" amp;_
" 003402/003749/331177/ 001453/000694/201326/002350/465197/003221/003402/" amp;_
" 400202/002901/001386/267611/000605/002349/137515/002709/464533 /0065438/" _ p>
" 002901/330421/001242/002651/199255/00 1323/529706/003733/001706 /398762/" amp;_
" 002741/001206/267438/002647/0018/20 4070 /003477/461653/001386/002413/" amp;_
" 330077/001197 /002637/268877/003365/53109/002900/002922/398042/002395/" _
" 001179/267415/002635/661067/001701748/398772/002742/00 2391/330031/"_
" 001175/00161/200010/003749/527717/001452/002 742/332397/002350/003222/ " amp;_
" 268949/003402/003493/133973/00138 6/464219 /000605/002349/334123/002709/" amp;_
" 002890/267946/002773 /592565/0010/002651/395863/001323/002707/265877/" amp;_
" 001706/002773/133557/001206/397998/002638/003366/335142/03411/00 1450/" _
" 200042/002413/723293/00197/002637/399 947/003365/003410 /334676/002906/" amp;_
" 0013
89/133467/00179/464023/002635/002725/333477/001746/002778/199350/" _
" 002359/526639/001175/06161/396618/003749/001 714 /267628/002734/ 002350 /" amp;_
" 203054/003222/465557/003402/003493/330581/001386/002669/264797/001325/" amp;_
" 529707/002709/ 002890 /399018/002773/001370/267450/002651/001323/202023/" _
" 001683/462419/001706/002773/330165/001206/002647/2647 82/003366/ 531750/"amp;_
"003410/003498/396650/001389/001198/267421/002637/003349/13800"
La matriz se ha cargado cuando está marcada como "Tf = True /p>".
Conector final
La función en lstr (idate como fecha) es la cadena "calendario solar a calendario lunar"
Si no es tf, llame a la matriz de carga
p> p>
Dim i, t amp, k, m, n, ext, bit amp
Calculado desde 1921-2-8 (es decir, el primer día del primer mes de 1921) hasta El número total de días en la fecha objetivo.
t = iDate-# 2/8/1921 # 1
Calcula los valores de año, mes y día lunares
Hacer
si Val(sNlShu(m)) lt; entonces k = 11 en caso contrario k = 12
n = k
Hacer.
Obtener el valor del enésimo bit binario de sNlShu(m)
bit = Val(sNlShu(m))
Para i = 1 an
bit = bit\ 2
Entonces
bit = bit Mod 2
Calcular el número de días en el calendario lunar
Si t lt= 29 bits
ext = 1
Salir Do
Finalizar si...
t = t - 29 bits
n = n - 1
Ciclo hasta n lt0
Si es ext, entonces sal de Do
m = m 1
Bucle hasta Error
Calcular tres valores del calendario lunar
Dim cy, cm, cd
cy = 1921 metros? Valor del año lunar
Cm = k-n 1 'Valor del mes lunar.
cd=t? Valor del día lunar
Si k = 12, entonces
Elija case val(snlshu(m))65536 1 ' para corregir el valor de cm.
La caja es = cm
cm = 1 cm
La caja es lt cm
cm = cm - 1
Finalizar selección
Terminará si...
Calcular texto chino
Atenuar(1 a 5) como cadena
M = ((cy-4) Mod 60) Mod 10 'Valor del índice de Tiangan.
N = ((cy-4) Mod 60) Mod 12 'Ramas terrenales y valores de los indicadores del zodíaco.
Si cm lt1 entonces ar(1) = "salto "
ar(1)= ar(1) amp SNlMon(Abs(cm))'mes lunar
Ar(2) = sNlDay(cd) "día lunar"
ar(3) = sTiGan(m) y ampsDiZhi(n)? ¿Tronco y ramas lunares
ar(4) = sSXiao(n)? Signos del zodíaco lunar
Ar(5) = sZhouJ(Weekday(iDate, 2))'caracteres chinos Zhou
Resultados de salida coincidentes (pista: la matriz ar(1 a 5) tiene un total de 5 elementos, puede hacer coincidir libremente los resultados de salida según sea necesario).
iNlStr = ar(3) y amp "año zodiacal"; ar(4) y amp" ampar(1) y ampar(2) y amp "semana"; resultado de salida de Ar(5)
Finalizar función