右侧
当前位置:网站首页 > 算命 > 正文

excel公历转农历(excel公历转农历 31号)

作者:admin 发布时间:2022-12-17 03:44 分类:算命 浏览:181


导读:本篇文章给大家谈谈excel公历转农历,以及excel公历转农历31号对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录一览:1、EXCEL公历转农历公式?...

本篇文章给大家谈谈excel公历转农历,以及excel公历转农历 31号对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

EXCEL公历转农历公式?

excel内置函数是无法完美实现的,至少闰月的情况会有问题。

只能考虑用VBA编程的方式,自定义一个函数。

图一:效果展示图:

效果展示图

图二:步骤示意思图:

步骤示意图

图三:完整代码图:

【步骤】:

1、如果文件是.xlsx格式,须另存为 .xlsm格式 即启用宏的工作簿。

2、按Alt+F11打开代码编辑器,

3、点“插入”--“模块”,

4、在左侧栏中双击模块,

5、在右侧的编辑区中粘贴代码,

6、检查代码是否报错变红,

7、关闭代码编辑器。

【重要说明】:

说明1、从这里复制的代码,行与行之间会被百度额外插入空白行,如果导致代码报错变红,你就把行与行之间的空白行删掉即可。

说明2、此代码也不是万能的,它有日期范围的限制,只能转化 1921年的正月初一 至 2100年的腊月三十 这个范围,对应的公历范围是 1921/2/8 至 2100/2/8

说明3、在表格中使用公式时,可以直接在公式中写明一个日期,也可以引用某单元格中的日期。

例1,转化具体的日期:

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

例2,永远转化今天当天的日期:

=iNlStr(TODAY())

例3,从单元格引用日期进行转化:

=iNlStr(A1)

【代码如下,供君复制】:

Option Explicit

Public tf As Boolean '

Public sZhouJ As Variant '星期数组

Public sTiGan As Variant '十个天干数组

Public sDiZhi As Variant '十二地支数组

Public sSXiao As Variant '十二生肖数组

Public sNlMon As Variant '农历月份数组

Public sNlDay As Variant '农历日份数组

Public sNlShu As Variant '农历数据数组

Sub 加载数组们()

  sZhouJ = Split("*/一/二/三/四/五/六/日", "/") '星期数组

  sTiGan = Split("甲/乙/丙/丁/戊/己/庚/辛/壬/癸", "/") '天干数组

  sDiZhi = Split("子/丑/寅/卯/辰/巳/午/未/申/酉/戌/亥", "/") '地支数组

  sSXiao = Split("鼠/牛/虎/兔/龙/蛇/马/羊/猴/鸡/狗/猪", "/") '生肖数组

  sNlMon = Split("*/正月/二月/三月/四月/五月/六月/七月/八月/九月/十月/冬月/腊月", "/") '月份数组

  sNlDay = Split( _

      "*/初一/初二/初三/初四/初五/初六/初七/初八/初九/初十" _

      "/十一/十二/十三/十四/十五/十六/十七/十八/十九/二十" _

      "/廿一/廿二/廿三/廿四/廿五/廿六/廿七/廿八/廿九/三十", "/") '日份数组

  sNlShu = Split( _

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

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

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

      "002901/330421/001242/002651/199255/001323/529706/003733/001706/398762/" _

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

      "330077/001197/002637/268877/003365/531109/002900/002922/398042/002395/" _

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

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

      "268949/003402/003493/133973/001386/464219/000605/002349/334123/002709/" _

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

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

      "200042/002413/723293/001197/002637/399947/003365/003410/334676/002906/" _

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

      "002359/526639/001175/001611/396618/003749/001714/267628/002734/002350/" _

      "203054/003222/465557/003402/003493/330581/001386/002669/264797/001325/" _

      "529707/002709/002890/399018/002773/001370/267450/002651/001323/202023/" _

      "001683/462419/001706/002773/330165/001206/002647/264782/003366/531750/" _

      "003410/003498/396650/001389/001198/267421/002637/003349/138021", "/") '农历数据

  tf = True '打标记,数组已加载

End Sub

Function iNlStr(iDate As Date) As String '公历转农历

  If Not tf Then Call 加载数组们

  Dim i%, t, k%, m%, n%, ext%, bit

  '计算从1921-2-8(即1921年的正月初一)至目标日期的总天数

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

  '计算农历年月日的数值

  Do

      If Val(sNlShu(m)) 4095 Then k = 11 Else k = 12

      n = k

      Do

          '获取sNlShu(m)的第n个二进制位的值

          bit = Val(sNlShu(m))

          For i = 1 To n

              bit = bit \ 2

          Next

          bit = bit Mod 2

          '计算农历天的数值

          If t = 29 + bit Then

              ext = 1

              Exit Do

          End If

          t = t - 29 - bit

          n = n - 1

      Loop Until n 0

      If ext Then Exit Do

      m = m + 1

  Loop Until False

  '计算农历叁个数值

  Dim cy%, cm%, cd%

  cy = 1921 + m  '农历年的数值

  cm = k - n + 1 '农历月的数值

  cd = t         '农历日的数值

  If k = 12 Then

      Select Case Val(sNlShu(m)) \ 65536 + 1 '修正cm的数值

      Case Is = cm

          cm = 1 - cm

      Case Is cm

          cm = cm - 1

      End Select

  End If

  '计算汉化文本

  Dim ar(1 To 5) As String

  m = ((cy - 4) Mod 60) Mod 10 '天干索引值

  n = ((cy - 4) Mod 60) Mod 12 '地支和生肖索引值

  If cm 1 Then ar(1) = "闰"

  ar(1) = ar(1) sNlMon(Abs(cm))   '农历月份

  ar(2) = sNlDay(cd)                '农历日份

  ar(3) = sTiGan(m) sDiZhi(n)     '农历干支

  ar(4) = sSXiao(n)                 '农历生肖

  ar(5) = sZhouJ(Weekday(iDate, 2)) '星期汉字

  '搭配输出结果(提示:数组ar(1 to 5)共5个元素,可根据需要自由搭配输出结果)

  iNlStr = ar(3) "年 生肖" ar(4) " " ar(1) ar(2) " 周" ar(5) '输出结果

End Function

WPS表格怎么将公历转化成农历日期?

excel公历转农历方法一:使用text函数

假设A列是公历日期,A1是公历日期,我们在B1单元格输入公式:=TEXT(A1,"[$-130000]yyyy年m月"IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")"d"),下拉完成公历转农历。

excel公历转农历方法二:使用text+MID函数实现更完整的转换

A列仍然是公历,B1输入公式:

=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A1,"[$-130000]e")-4,10)+1,1)MID("子丑寅卯辰巳午未申酉戌亥",MOD(TEXT(A1,"[$-130000]e")-4,12)+1,1)"年"TEXT(A1,"[$-130000][DBNum1]m月d日")

即可。

这里增加了参数[DBNum1],表示数值以“一、二、三......”中文格式显示。

excel公历转农历方法三:使用text+MID+ CHOOSE+ YEAR函数

A1为公历,B1输入:

=CHOOSE(MOD(YEAR(A1)-1900,10)+1,"庚","辛","壬","癸","甲","乙","丙","丁","戊","己")CHOOSE(MOD(YEAR(A1)-1900,12)+1,"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥")TEXT(A1,"[dbnum1][$-130000]年m月"IF(--TEXT(A1,"[$-130000]d")11,"初","")TEXT(A1,"[dbnum1][$-130000]d"))

这里可以对初几进行显示

excel公历转农历方法四:使用自定义函数

 上面介绍的excel公历转农历都是使用excel内置函数完成的,有一个弊端就是公式太长,如果使用自定义函数,在公式栏就可以简化输入。

如下图所示,我们在B2输入公式:=nongli(A1),即可。C列农历简称中C1公式是:=RIGHT(B1,LEN(B1)-8)。

下面是此自定义函数相关的代码:

Public Function NongLi(Optional XX_DATE As Date)

Dim MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)

Dim curTime, curYear, curMonth, curDay

Dim GongliStr, NongliStr, NongliDayStr

Dim i, m, n, k, isEnd, bit, TheDate

'获取当前系统时间

curTime = XX_DATE

'天干名称

TianGan(0) = "甲"

TianGan(1) = "乙"

TianGan(2) = "丙"

TianGan(3) = "丁"

TianGan(4) = "戊"

TianGan(5) = "己"

TianGan(6) = "庚"

TianGan(7) = "辛"

TianGan(8) = "壬"

TianGan(9) = "癸"

'地支名称

DiZhi(0) = "子"

DiZhi(1) = "丑"

DiZhi(2) = "寅"

DiZhi(3) = "卯"

DiZhi(4) = "辰"

DiZhi(5) = "巳"

DiZhi(6) = "午"

DiZhi(7) = "未"

DiZhi(8) = "申"

DiZhi(9) = "酉"

DiZhi(10) = "戌"

DiZhi(11) = "亥"

'属相名称

ShuXiang(0) = "鼠"

ShuXiang(1) = "牛"

ShuXiang(2) = "虎"

ShuXiang(3) = "兔"

ShuXiang(4) = "龙"

ShuXiang(5) = "蛇"

ShuXiang(6) = "马"

ShuXiang(7) = "羊"

ShuXiang(8) = "猴"

ShuXiang(9) = "鸡"

ShuXiang(10) = "狗"

ShuXiang(11) = "猪"

'农历日期名

DayName(0) = "*"

DayName(1) = "初一"

DayName(2) = "初二"

DayName(3) = "初三"

DayName(4) = "初四"

DayName(5) = "初五"

DayName(6) = "初六"

DayName(7) = "初七"

DayName(8) = "初八"

DayName(9) = "初九"

DayName(10) = "初十"

DayName(11) = "十一"

DayName(12) = "十二"

DayName(13) = "十三"

DayName(14) = "十四"

DayName(15) = "十五"

DayName(16) = "十六"

DayName(17) = "十七"

DayName(18) = "十八"

DayName(19) = "十九"

DayName(20) = "二十"

DayName(21) = "廿一"

DayName(22) = "廿二"

DayName(23) = "廿三"

DayName(24) = "廿四"

DayName(25) = "廿五"

DayName(26) = "廿六"

DayName(27) = "廿七"

DayName(28) = "廿八"

DayName(29) = "廿九"

DayName(30) = "三十"

'农历月份名

MonName(0) = "*"

MonName(1) = "正"

MonName(2) = "二"

MonName(3) = "三"

MonName(4) = "四"

MonName(5) = "五"

MonName(6) = "六"

MonName(7) = "七"

MonName(8) = "八"

MonName(9) = "九"

MonName(10) = "十"

MonName(11) = "十一"

MonName(12) = "腊"

'公历每月前面的天数

MonthAdd(0) = 0

MonthAdd(1) = 31

MonthAdd(2) = 59

MonthAdd(3) = 90

MonthAdd(4) = 120

MonthAdd(5) = 151

MonthAdd(6) = 181

MonthAdd(7) = 212

MonthAdd(8) = 243

MonthAdd(9) = 273

MonthAdd(10) = 304

MonthAdd(11) = 334

'农历数据

NongliData(0) = 2635

NongliData(1) = 333387

NongliData(2) = 1701

NongliData(3) = 1748

NongliData(4) = 267701

NongliData(5) = 694

NongliData(6) = 2391

NongliData(7) = 133423

NongliData(8) = 1175

NongliData(9) = 396438

NongliData(10) = 3402

NongliData(11) = 3749

NongliData(12) = 331177

NongliData(13) = 1453

NongliData(14) = 694

NongliData(15) = 201326

NongliData(16) = 2350

NongliData(17) = 465197

NongliData(18) = 3221

NongliData(19) = 3402

NongliData(20) = 400202

NongliData(21) = 2901

NongliData(22) = 1386

NongliData(23) = 267611

NongliData(24) = 605

NongliData(25) = 2349

NongliData(26) = 137515

NongliData(27) = 2709

NongliData(28) = 464533

NongliData(29) = 1738

NongliData(30) = 2901

NongliData(31) = 330421

NongliData(32) = 1242

NongliData(33) = 2651

NongliData(34) = 199255

NongliData(35) = 1323

NongliData(36) = 529706

NongliData(37) = 3733

NongliData(38) = 1706

NongliData(39) = 398762

NongliData(40) = 2741

NongliData(41) = 1206

NongliData(42) = 267438

NongliData(43) = 2647

NongliData(44) = 1318

NongliData(45) = 204070

NongliData(46) = 3477

NongliData(47) = 461653

NongliData(48) = 1386

NongliData(49) = 2413

NongliData(50) = 330077

NongliData(51) = 1197

NongliData(52) = 2637

NongliData(53) = 268877

NongliData(54) = 3365

NongliData(55) = 531109

NongliData(56) = 2900

NongliData(57) = 2922

NongliData(58) = 398042

NongliData(59) = 2395

NongliData(60) = 1179

NongliData(61) = 267415

NongliData(62) = 2635

NongliData(63) = 661067

NongliData(64) = 1701

NongliData(65) = 1748

NongliData(66) = 398772

NongliData(67) = 2742

NongliData(68) = 2391

NongliData(69) = 330031

NongliData(70) = 1175

NongliData(71) = 1611

NongliData(72) = 200010

NongliData(73) = 3749

NongliData(74) = 527717

NongliData(75) = 1452

NongliData(76) = 2742

NongliData(77) = 332397

NongliData(78) = 2350

NongliData(79) = 3222

NongliData(80) = 268949

NongliData(81) = 3402

NongliData(82) = 3493

NongliData(83) = 133973

NongliData(84) = 1386

NongliData(85) = 464219

NongliData(86) = 605

NongliData(87) = 2349

NongliData(88) = 334123

NongliData(89) = 2709

NongliData(90) = 2890

NongliData(91) = 267946

NongliData(92) = 2773

NongliData(93) = 592565

NongliData(94) = 1210

NongliData(95) = 2651

NongliData(96) = 395863

NongliData(97) = 1323

NongliData(98) = 2707

NongliData(99) = 265877

'生成当前公历年、月、日 == GongliStr

curYear = Year(curTime)

curMonth = Month(curTime)

curDay = Day(curTime)

GongliStr = curYear  "年"

If (curMonth  10) Then

GongliStr = GongliStr  "0"  curMonth  "月"

Else

GongliStr = GongliStr  curMonth  "月"

End If

If (curDay  10) Then

GongliStr = GongliStr  "0"  curDay  "日"

Else

GongliStr = GongliStr  curDay  "日"

End If

'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)

TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38

If ((curYear Mod 4) = 0 And curMonth  2) Then

TheDate = TheDate + 1

End If

'计算农历天干、地支、月、日

isEnd = 0

m = 0

Do

If (NongliData(m)  4095) Then

k = 11

Else

k = 12

End If

n = k

Do

If (n  0) Then

Exit Do

End If

'获取NongliData(m)的第n个二进制位的值

bit = NongliData(m)

For i = 1 To n Step 1

bit = Int(bit / 2)

Next

bit = bit Mod 2

If (TheDate = 29 + bit) Then

isEnd = 1

Exit Do

End If

TheDate = TheDate - 29 - bit

n = n - 1

Loop

If (isEnd = 1) Then

Exit Do

End If

m = m + 1

Loop

curYear = 1921 + m

curMonth = k - n + 1

curDay = TheDate

If (k = 12) Then

If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then

curMonth = 1 - curMonth

ElseIf (curMonth  (Int(NongliData(m) / 65536) + 1)) Then

curMonth = curMonth - 1

End If

End If

'生成农历天干、地支、属相 == NongliStr

NongliStr = "农历"  TianGan(((curYear - 4) Mod 60) Mod 10)  DiZhi(((curYear - 4) Mod 60) Mod 12)  "年"

NongliStr = NongliStr  "("  ShuXiang(((curYear - 4) Mod 60) Mod 12)  ")"

'生成农历月、日 == NongliDayStr

If (curMonth  1) Then

NongliDayStr = "闰"  MonName(-1 * curMonth)

Else

NongliDayStr = MonName(curMonth)

End If

NongliDayStr = NongliDayStr  "月"

NongliDayStr = NongliDayStr  DayName(curDay)

NongLi = NongliStr  NongliDayStr

End Function

公历转农历公式,在EXCEL中怎样把公历转换成农历

提到公历转农历公式,大家都知道,有人问公历农历转换,另外,还有人想问将公历转换成农历的换算公式公式是什么,你知道这是怎么回事?其实农历转换成公历的计算公式,下面就一起来看看在EXCEL中怎样把公历转换成农历,希望能够帮助到大家!

公历转农历公式

原发布者:谭韬君Gonglizuannongli。

农历转换成公历的计算公式?

公历和农历是如何换算的?农历查询。

公历和农历之间是不能换算的,二者采用的计算方法不同,没有特殊关系可以查询,只能分别计算。excel农历转公历公式。

公历是阳历的一种,阳历就是以地球绕太阳公转的运动周期为基础而制定的历法。公历农历转换公式。

公历别称公元、西历、西元等,是一种源自于的纪年方法,由意大利医生兼哲学家Aloysius Lilius对儒略历加以而制成的一种历法。1582年,时任罗马教皇的格列高利十予以批准颁行,以诞生之年作为纪年的开始。公历转化农历简单公式。

公历是一种平均太阳历,只有回归年,不管朔。地球绕太阳一周的时间为365.2422天,因此,平均每4年便会少大约1天的时间。

因此,公历规定每4年里有1个闰年,将这一天加在天数最少的2月,故闰年的2月有29天。实际操作中为了方便,规定凡是能被4除尽的年份(末尾有两个0的要被400除尽),皆为闰年。如1996,2000等皆为闰年。

公历转农历公式:公历农历转换

农历也是“历”,又称为夏历、阴历、旧历,是东亚传统历法之一。农历属于一种历,平均历月等于一个朔,但设置闰月以使平均历年为一个回归年,设置二十四节气以反映季节(太阳直射点的周年运动)的变化特征,所以又有阳历的成分。公历农历月份转换公式。

平年十二个月,大月三十天,小月二十九天,全年354天或355天。由于每年的天数比太阳年约差十一天,所以采用设置闰月的方法使这几年的平均日数尽。农历和公历换算的公式。

和阴历一样,在19年里中设置了7个闰月。不过和阴历不同的是,又根据太阳的位置,把一个太阳年分成二十四个节气,以利于农业种植等活动。纪年用天干地支搭配,六十年周而复始。这种历传创始于夏代,所以又称为夏历。也叫旧历。

这就导致了农历和阴历的起始月份不一样,阴历是以正月初一为一年的起点,而农历是按24节气来划分的,也就是说立春是农历的起点。公历换算农历公式。

阳历就是太阳历,是以地球绕太阳公转的运动周期为基础而制定的历法。一年12个月,这个“月”实际上与朔无关,月份、日期都与太阳在黄道上的位置较好地合,在一年中可以明显看出四季寒暖变化的情况。公历农历 公式。

阴历,又称太阴历,是以月球绕行地球一周为一个月,即以朔作为确定历月的基础的一种历法。农历转公历转换器。

因朔较之回归年易于观测,远古的历法几乎都历。但是朔的长度(29.5306日)为一个月的平均值,全年12个月,同回归年(365.2422日)相差约10日21时,所以,需要设置闰月,三年闰一个月,五年闰二个月,十九年闰七个月。公历农历转换。

以上就是与在EXCEL中怎样把公历转换成农历相关内容,是关于公历农历转换的分享。看完公历转农历公式后,希望这对大家有所帮助!

excel如何农历转换阳历公式?

Excel农历转公历公式,网上几乎搜不到,我自己花功夫还是慢慢摸索出来了,如图:

Excel 农历转公历

比如要查找的农历日期为今年的“三月十五”,那就先将A列的格式从“常规”改为“文本”,将B列的格式从“常规”改为“日期”,然后在A2单元格内输入【2022-3-15】,再在B2单元格内输入如下等式:

=IFERROR(SMALL(IF(TEXT(ROW(INDIRECT(DATE(LEFT(A2,4),1,1)":"DATE(LEFT(A2,4),12,31))),"[$-130000]YYYY-M-D")=A2,ROW(INDIRECT(DATE(LEFT(A2,4),1,1)":"DATE(LEFT(A2,4),12,31))),""),1),SMALL(IF(TEXT(ROW(INDIRECT(DATE(LEFT(A2,4)+1,1,1)":"DATE(LEFT(A2,4)+1,12,31))),"[$-130000]YYYY-M-D")=A2,ROW(INDIRECT(DATE(LEFT(A2,4)+1,1,1)":"DATE(LEFT(A2,4)+1,12,31))),""),1))

最后三键回车,Excel会自动计算后显示结果为【2022-4-15】,这个就是对应【2022-3-15】的公历日期。

望采纳。

excel公历转农历的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于excel公历转农历 31号、excel公历转农历的信息别忘了在本站进行查找喔。

标签:


算命排行
最近发表
友情链接

关灯