Red de conocimiento de abogados - Derecho de sociedades - ¿Fórmula del calendario gregoriano de Excel al calendario lunar?

¿Fórmula del calendario gregoriano de Excel al calendario lunar?

Las funciones integradas de Excel no se pueden implementar perfectamente, al menos habrá problemas en el caso de los meses bisiestos.

Solo puedes considerar usar la programación VBA para personalizar una función.

Figura 1: Visualización de efectos:

Visualización de efectos

Figura 2: Diagrama de pasos:

Diagrama de pasos

p>

Figura 3: Diagrama de código completo:

Pasos:

1. Si el archivo está en formato .xlsx, debe guardarse como formato .xlsm, es decir, un libro de trabajo habilitado para macros.

2. Presione Alt F11 para abrir el editor de código,

3. Haga clic en "Insertar" - "Módulo",

4. -Haga clic en el módulo,

5. Pegue el código en el área de edición de la derecha,

6. Compruebe si el código informa un error y se vuelve rojo,

<. p>7. Cierre el dispositivo de edición de código.

Nota importante:

Nota 1. Baidu insertará líneas en blanco adicionales entre las líneas del código copiado desde aquí. Si esto hace que el error del código se vuelva rojo, simplemente puede eliminarlo. las líneas en blanco entre ellos.

Nota 2. Este código no es omnipotente. Tiene restricciones de rango de fechas y solo puede convertir el rango desde el primer día del primer mes lunar en 1921 al trigésimo día del duodécimo mes lunar en 2100. El rango correspondiente del calendario gregoriano es 1921/2/8 a 2100/2/8

Nota 3. Al utilizar fórmulas en tablas, puede escribir directamente una fecha en la fórmula o puede hacer referencia a la fecha en una determinada celda.

Ejemplo 1, convertir la fecha específica:

=iNlStr(DATE(2020, 8, 18))

Ejemplo 2, convertir siempre la fecha de hoy:

=iNlStr(TODAY())

Ejemplo 3, convertir fecha de referencia de celda:

=iNlStr(A1)

El código es el siguiente para que lo copie:

Opción explícita

Pública tf como booleana '

Pública sZhouJ como variante 'Matriz de semana

sTiGan público como variante 'conjunto de diez tallos celestiales

SDiZhi público como variante 'conjunto de doce ramas terrestres

SSXiao público como variante 'conjunto de doce signos del zodíaco

Public sNlMon As Variant 'Matriz de meses del calendario lunar

Public sNlDay As Variant 'Matriz de días del calendario lunar

Public sNlShu As Variant 'Matriz de datos del calendario lunar

Sub Cargar matrices ( )

sZhouJ = Split("*/Lunes/Martes/Miércoles/Jueves/Viernes/Sábado/Día", "/") 'Matriz de semana

sTiGan = Dividir ("A / Yi / B / D / Wu / Ji / Geng / Xin / Ren / Gui", "/") 'Matriz de tallos celestiales

sDiZhi = Split("Zi/Chou/Yin/Mao /Chen/Si /Wu/Wei/Shen/You/Xu/Hai", "/") 'Matriz de ramas terrestres

sSXiao = Split("Rata/Buey/Tigre/Conejo/Dragón/Serpiente/ Caballo/Oveja/Mono /Pollo/Perro/Cerdo", "/") 'Matriz del zodiaco

sNlMon = Split("*/Primer mes/febrero/marzo/abril/mayo/junio/julio/ocho Mes/Septiembre/Octubre/Mes de invierno/Duodécimo mes lunar", "/") 'matriz de meses

sNlDay = Split(_

"*/primer día/segundo día/primer día Tercero/Cuarto/Quinto/Sexto/Séptimo/Octavo/Noveno/Décimo" _

amp; "/Once/Doce/Trece/Catorce/Quince/ Dieciséis/diecisiete/dieciocho/diecinueve/veinte" _

amp; "/veintiuno/veintidós/veintitrés/veinticuatro/veinticinco/veintiséis/veintisiete/veintiocho /veintinueve/treinta", "/") 'Matriz de días

sNlShu = Split( _

"002635/333387/001701/001748/267701/000694/002391/ 133423/001175/396438/" amp; _

"003402/003749/331177/001453/000694/201326/002350/465197/003221/003402/" amplificador _

" 400202/002901/001386/267611/000605 /002349/137515/002709/464533/001738/"_

" 002901/330421/001242/002651/199255/0013 23/529706/003733333333306/398762;

"002741/001206/267438/002647/001318/204070/003477/461653/001386/002413/" _

"330077/001197/002637/268877/003365/5311 02900/002922/398042 / 002395/" amp; _

"001179/267415/002635/661067/001701/001748/398772/002742/002391/330031/" amp; _

"001175/001611 / 200010/003749/527717/001452/002742/332397/002350/003222/" _

"268949/003402/003493/133973/001386/464219/000605/0023 34123/002709/" amperio; _

"002890/267946/002773/592565/001210/002651/395863/001323/002707/265877/" amplificador _

"001706/002773/133557/001206 /397998 /002638/003366/335142/003411/001450/" _

"200042/002413/723293/001197/002637/399947/003365/003410/334676/0029 06/"amp; _

"001389/133467/001179/464023/002635/002725/333477/001746/002778/199350/" _

"002359/526639/001175/001611/39661 8/00374 9 /001714/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/00 1206/002647/2 64782 /003366/531750/ " amp; _

"003410/003498/396650/001389/001198/267421/002637/003349/138021", "/") 'Datos del calendario lunar

tf = True ' Marque, la matriz se ha cargado

End Sub

Función iNlStr(iDate As Date) As String 'Convertir calendario gregoriano en calendario lunar

Si no es tf, entonces Llamar

Cargue las matrices

Dim i, tamp;, k, m, n, ext, bitamp;

'Calcular desde 1921-2-8 (es decir, el primer día de la primera luna mes en 1921) El número total de días hasta la fecha objetivo

t = iDate - #2/8/1921# 1

'Calcular el valor del año, mes y día

Hacer

p>

Si Val(sNlShu(m)) lt 4095 Entonces k = 11 De lo contrario k = 12

n = k

Hacer

' Obtener el valor del enésimo bit binario de sNlShu(m)

bit = Val(sNlShu(m))

Para i = 1 To n

bit = bit \ 2

Siguiente

bit = bit Mod 2

'Calcular el valor del día lunar

Si t lt = 29 bits Entonces

text = 1

Salir Do

Finalizar si

t = t - 29 - bit

n = n - 1

Bucle hasta n lt 0

Si ext entonces salir Do

m = m 1

Bucle hasta falso

'Calcular los tres valores del calendario lunar

Dim cy, cm, cd

cy = 1921 m? 'El valor del año lunar

cm = k - n 1 'El valor del mes lunar

cd = t ?' valor del día lunar

Si k = 12 Entonces

Seleccione Case Val(sNlShu(m)) \ 65536 1 'Corregir el valor de cm

Caso Es = cm

cm = 1 - cm

Caso Es lt cm

cm = cm - 1

Selección final

End If

'Calcular texto chino

Dim ar (1 a 5) como cadena

m = ((cy - 4) Mod 60) Mod 10 'Valor del índice de Tiangan

n = ((cy - 4) Mod 60) Mod 12 'Valor del índice de las ramas terrestres y del zodíaco

Si cm lt; 1) = "Salto"

ar(1) = ar(1) amp; sNlMon(Abs( cm)) 'Mes lunar

ar(2) = sNlDay(cd) 'Día lunar

>

ar(3) = sTiGan(m) amp; sDiZhi(n) ?'tallos y ramas lunares

ar(4) = sSXiao(n) ?'zodíaco lunar

ar(5) = sZhouJ(Weekday(iDate, 2)) 'Caracteres chinos de la semana

'Resultados de salida de colocación (consejo: matriz ar(1 a 5)***5 elementos, puede se puede combinar libremente según sea necesario Resultado de salida)

iNlStr = ar(3) amp "Year Zodiac" amp; ; "Semana" amp; ar(5) 'Resultado de salida

Función final