Red de conocimientos turísticos - Preguntas y respuestas turísticas - Cómo utilizar funciones en EXCEL para convertir fechas del calendario gregoriano a fechas del calendario lunar

Cómo utilizar funciones en EXCEL para convertir fechas del calendario gregoriano a fechas del calendario lunar

Módulo del calendario gregoriano al calendario lunar

Texto original: Internet

Revisado: A Yong 2005/1/12

//Definición de datos lunares//

Primero, restaure la función H2B a una cadena de longitud 18, que se define de la siguiente manera:

Los primeros 12 bytes representan el 1-65438 de febrero: 1 es el mes grande, 0 es el mes pequeño; comprimido en diez hexadecimales (1-3 dígitos)

13 es un mes bisiesto, 1 es un mes grande de 30 días, 0 es un mes pequeño de 29 días (4 dígitos)

El 14 El bit es el mes del mes bisiesto. 0 si no es un mes bisiesto; en caso contrario, indica el mes (5 dígitos).

Los últimos cuatro dígitos son la fecha del calendario gregoriano del Año Nuevo Lunar, por ejemplo, 0131 representa 65438 31 de octubre; convierta el valor a hexadecimal (6-7 dígitos)

Luna; constante (1899~2100, ***202)

Private Const ylData = "AB500D2, 4BD0883," _

amp "4AE00DB, A5700D0, 54D0581, D2600D8, D9500CC, 655147D, 56A00D5, 9AD00CA, 55D027A, 4AE00D2, "_

amp" A5B0682, A4D00DA, D2500CE, D25157E, B5500D6, 56A00CC, ADA027B, 95B00D3, 49717C9, 49B00DC, "

amplificador" 0D0, B4B0580, 6A500D8, 6D400CD, AB5147C, 2B600D5, 95700CA, 52F027B, 49700D2, 6560682, "_

&" D4A00D9, EA500CE, 6A9157E, 5AD00D6, B600CC, 86E137C,92E00D3,C8D1783,C9500DB, D4A00D0," _

amp" D8A167F, B5500D7, 56A00CD, A5B147D, 25D00D5, 92D00CA, D2B027A, A9500D2, B550781, 6CA00D9, " _

amp" B5500CE, 4DA00D6, A 5B00CB, 457037C, 52B00D4, A9A0883, E9500DA, 6AA00D0, AEA0680, "_

amp" AB500D7, 4B600CD, AAE047D, A5700D5, 52600CA, F260379, D9500D1, 50782, 56A00D9, 96D0 0CE," _

amplificador" 4DD057F, 4AD00D7, A4D00CB, D4D047B, D2500D3, D550883, B5400DA, B6A00CF, 95A1680, 95B00D8, "_

amplificador" 49B00CD, A97047D, A4B00D5, ACA, 6A 500CC, 6D400D1, AF40681, AB600D9, 93700CE, 4AF057F, "_

amp" 49700D7, 64B00CC, 74A037B, EA500D2, 6B50883, 5AC00DB, AB600CF, 96D0580, 92E00D8, 600CD, "_

amplificador" D95047C, D4A00 D4, DA500C9, 755027A, 56A00D1, ABB0781, 25D00DA, 92D00CF, CAB057E, A9500D6, "_amp" B4A00CB, BAA047B, B5500D2, 55D0983, BA00DB, A5B00D0, 5171680, 52B00D8, A9300CD,795047D," _

&

6D00D3, 4AB0B83, 4AD00DB, A4D00D0, D0B1680, D2500D7, D5200CC, DD4057C, B5A00D4, 56D00C9, 55B027A, 49B00D2, A570782, A4B00D9, AA500CE, B25 157E,6D200D6,ADA00CA,4B6137B," _

amp"93700D3 , 49F08C9, 49700DB, 64B00D0, 68A1680, EA500D7, 6AA00CC, A6C147C, AAE00D4, 92E00CA,"_

amp" D2E0379, C9600D1, D550781, D4A 00D9, DA400CD, 5D5057E, 56A00D6, A6C00CB, 55D047B, 52D00D3 , "_

amp" A9B0883, A9500DB, B4A00CF, B6A067F, AD500D7, 55A00CD, ABA047C, A5A00D4, 52B00CA, B2703 7A, "_

AMP" 69300D1, 7330781, 6A00D9, 6A00D9, 6A00D9, 6A00D9, 6A00DEM AD500CE, 4B5157E, 4B600D6, A5700CB, 54E047C, D1600D2, E960882, "_

ampD5200DA, DAA00CF, 6AA167F, 56D00D7, 4AE0 0CD, A9D047D, A2D00D4, C9, F250279, D5200D1

Private Const ylMd0 =Nivel, Nivel 2, Nivel 3, Nivel 4, Nivel 5, Nivel 6, Nivel 7, Nivel 8, Nivel 9, Nivel 11, Nivel 12, Nivel 345"

amp"16, 789, 21, 22, 23, 24, 25, 26, 27, 28, 2930"

Private Const ylMn0 = "Cera de invierno positiva".

Privado Const ylTianGan0 = "A, B, P, D, E, H, N, N".

Privado Const ylDiZhi0 = "Zi Chou Mao Yin Chen se ha instalado en Xu Hai al mediodía"

Privado Const ylShu0 = "Rata, Buey, Tigre, Conejo, Dragón, Serpiente, Caballo , Oveja, mono, gallina, perro y cerdo"

Fecha del calendario solar al calendario lunar

Función GetYLDate(ByVal strDate As String) como cadena

Ir a aErr cuando ocurre un error

Si no es IsDate(strDate), salga de la función

Dim setDate es la fecha, tYear es el número entero, tMonth es el número entero, tDay es el número entero

setDate = CDate (strDate)

tYear = Año(setDate):tMonth = Month(setDate):tDay = Día(setDate)

Salir si no es válido y tiene una cita.

Si tYear gt2100 o tYear lt1900 entonces salga de la función

Dim daList() es cadena * 18, conDate es fecha, thisMonths es cadena

Dim AddYear es un número entero, AddMonth es un número entero, AddDay es un número entero, getDay es un número entero

Dim YLyear es una cadena, YLShuXing es una cadena

Dim dd0 es una cadena, mm0 es un cadena, ganzhi (0 a 59) es una cadena * 2

Dim RunYue es un valor booleano, RunYue1 es un número entero, mDays es un número entero, I es un número entero

Cargar lunar datos del calendario dentro de 2 años.

ReDim daList(tAño - 1 a tAño)

daList(tAño-1)= H2B(Mid(ylData, (tAño - 1900) * 8 1, 7))

daList(tAño) = H2B(Mid(ylData, (tAño-1900 1)* 8 1, 7))

AgregarAño = tAño

initYL:

p>

agregar mes = CInt(Mid(daList(AddYear), 15, 2))

AddDay = CInt(Mid(daList(AddYear), 17, 2))

Condate = dateserial (addyear, addmonth, addday) 'Fecha del Año Nuevo Lunar.

Getday = dateiff ("d",condate,setdate) 1 'Diferencia de día.

Si getDay lt1 entonces AddYear = AddYear - 1: vaya a initYL

thisMonths = Left(daList(AddYear), 14)

ejecute yue 1 = Val (&H "&pair(thisMonths, 1))'Mes bisiesto

Si ejecuta yue 1 > 0 Entonces 'Hay un mes bisiesto.

thisMonths = Left(thisMonths, ejecuta yue 1 ) amp; mitad de mes (este mes, 13, 1). Mitad de mes (este mes, RunYue1 1)

Terminará si...

thisMonths = Left( thisMeses, 13)

Para i = 1 a 13 'Calcule el número de días.

mDays = 29 CInt(Mid(thisMonths, I, 1))

Si getDay gtentonces cuántos días

getDay = getDay - mDays

p>

Otro

Si ejecuta yue 1 gt; entonces 0

Si i = RunYue1 1, entonces RunYue = True

Si i gtRunYue1 entonces i = i - 1

Terminará si...

AddMonth = i

AddDay = getDay

Salir por. ..

p>

Terminará si...

Entonces

dd0 = Mid(ylMd0, (AddDay - 1) * 2 1, 2)

MM0 = mid (ylmn0, addmonth, 1) "mes"

Para i = 0 a 59

Tallos y ramas (i) = Mid(ylTianGan0 , (i Mod 10) 1, 1) Mid(ylDiZhi0, (i Mod 12) 1

Siguiente yo

YLyear = ganzhi((AddYear - 4) Mod 60)

YLShuXing = Mid( ylShu0, ((AddYear - 4) Mod 12) 1, 1)

Si Runyue entonces mm0 = " salto " ; "Año Nuevo Lunar" ; YLyear amp" ("ampYLShuXing amp")año"; mm0 ampdd0

aErr:

Fin de función

Fecha lunar a gregoriana

SecondMonth es verdadero, luego se muestra la fecha cuando tMonth es un mes bisiesto y se toma el segundo mes.

La función GetDate (ByVal tYear es un número entero, tMonth es un número entero. , tDay es un número entero, secondMonth opcional es booleano = False) es una cadena

Ir a aErr en caso de error

Si tYear gt2100 o tYear lt1899 o tMonth gt12 o tMonth lt1 o tDay. gt30 o tDay lt1 y luego salga de la función

Dim thisMonths es String, ylNewYear es la fecha, toMonth es el número entero

Dim mDays es el número entero, RunYue1 es el número entero, I es el número entero

thisMonths = H2B(Mid(ylData, (tYear - 1899) * 8 1, 7))

Si tDay gt entonces sal de la función

Yl new año = dateerial (t año, cint (mediados (este mes, 15, 2)), cint (mediados (este mes, 17, 2))' fecha del Año Nuevo Lunar.

thisMonths = Left(thisMonths, 14)

ejecute yue 1 = Val(&H "ampright(thisMonths,1))'Mes bisiesto

toMonth = tMonth - 1

Si ejecuta yue 1 gt; 0 Entonces 'Hay un mes bisiesto.

thisMonths = Left(thisMonths, run yue 1) & mid-month (este mes, 13, 1). A mitad de mes (este mes, RunYue1 1)

Si tMonth gtrun yue 1 O (segundo mes y t mes = ejecutar yue 1) entonces toMonth = tMonth

Si... terminará

thisMonths = Left(thisMonths, 13)

mDays = 0

Para i = 1 al mes

mDays = mDays 29 CInt(Mid (este mes, I, 1))

Entonces

mDays = mDays tDay

GetDate = yl año nuevo mDays-1

aErr:

Finalizar función

Restaurar caracteres lunares comprimidos

Función privada H2B (ByVal strHex As String) como cadena

Dim i es un número entero, i1 es un número entero, tmpV es una cadena

const hStr = " 0123456789 abcdef "

const bStr = " 00000001001000101000101010101011111100065438

tmpV = UCase(Left (strHex, 3))

Hex a Binario

Para i = 1 a Len(tmpV)

i1 = InStr(hStr, Mid ( tmpV, I, 1))

H2B = H2B amp Mid(bStr, (i1 - 1) * 4 1, 4)

Entonces

H2B = H2B amp; valor medio (strHex, 4, 2)

Hex a decimal

H2B = H2B amp; 0 amp; strHex, 2)))

Función final