excel表格如何显示农历日期

 我来答
诸事可言
高粉答主

2019-04-10 · 兢兢业业的社会风向的观察者
诸事可言
采纳数:30 获赞数:28096

向TA提问 私信TA
展开全部

设置excel表格日期显示为农历的步骤如下:

1、打开需要操作的excel表格,在A1单元格输入如下函数:“=TEXT(NOW(),"[$-130000]YYYY-M-D")”。

2、单元格中可以观察到出现了一个日期:农历日期为六月初一。

3、如果要将农历形式完全显示出来,就可以输入下列公式:=MID(" 甲乙丙丁戊己庚辛壬癸",MOD(TEXT(NOW(),"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉 戌亥",MOD(TEXT(NOW(),"[$-130000]e")-4,12)+1,1)&"年"&TEXT(NOW()," [$-130000][DBNum1]m月d日")。

将心比心930307
高粉答主

2019-01-15 · 说的都是干货,快来关注
知道小有建树答主
回答量:84
采纳率:100%
帮助的人:3万
展开全部

简单版:

B2单元格就是第一种情况,“2016-9-17”表示农历是九月十七日。该公式是:=TEXT(A2,'[$-130000]YYYY-M-D')。

TEXT()用来转化文本格式,这个公式的关键是:[$-130000],它是Excel中阳历转化农历的参数,不过它存在一个问题就是没法计算闰月,估计老外无法理解中国人闰月的概念,凡是闰年,它直接表示一年13个月,道理是一样的。

进阶版:

C2单元格,相比较B2单元格呈现就有了进阶,以中文呈现,并且以天干地支表现年份。

公式相对之前肯定复杂:=MID(' 甲乙丙丁戊己庚辛壬癸',MOD(TEXT(A2,'[$-130000]e')-4,10) 1,1)&MID('子丑寅卯辰巳午未申酉 戌亥',MOD(TEXT(A2,'[$-130000]e')-4,12) 1,1)&'年'&TEXT(A2,' [$-130000][DBNum1]m月d日')。

可以分解为两大部分:

1、计算年份:MID(' 甲乙丙丁戊己庚辛壬癸',MOD(TEXT(A2,'[$-130000]e')-4,10) 1,1)&MID('子丑寅卯辰巳午未申酉 戌亥',MOD(TEXT(A2,'[$-130000]e')-4,12) 1,1)&'年',这里加了MID()文本提取函数来获取天干地支。

2、计算月日:TEXT(A2,' [$-130000][DBNum1]m月d日'),这里增加了参数[DBNum1],表示数值以“一、而二、三......”中文格式显示。两者组合一起的就是C列结果。完美版作为中国人,我们知道“一月”不叫“一月”,叫“正月”。

“十二月”不叫“十二月”,叫“腊月”;同样每月前10天,是初一、初二......20日开始是廿、廿一......30日是卅等等。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风正半帆
2018-02-13 · TA获得超过5万个赞
知道大有可为答主
回答量:2494
采纳率:79%
帮助的人:741万
展开全部

这个需要VBA了.本人从网上搜到的,不是本人的成果,供参考。本人也收藏了。祝您顺利。
按ALT搜索+F11 再 插入 模块
把下面的代码制复制到模块中,然后 在B1中输入:
=calendar(A1)
假设日期在A1

Option Explicit
Dim WeekName(7), MonthAdd(11), NongliData(120), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate, num1, num2
Dim year, month, day, grid, grid_date
Function calendar(grid)
grid_date = grid
year = Mid(grid_date, 1, 4)
num1 = InStr(grid_date, "-")
num2 = InStr(6, grid_date, "-")
If (num2 - num1) = 3 Then
  month = Mid(grid_date, 6, 2)
  day = Mid(grid_date, 9, 2)
 
Else
  month = Mid(grid_date, 6, 1)
  day = Mid(grid_date, 8, 2)
  
End If
'星期名
WeekName(0) = " * "
WeekName(1) = "星期日"
WeekName(2) = "星期一"
WeekName(3) = "星期二"
WeekName(4) = "星期三"
WeekName(5) = "星期四"
WeekName(6) = "星期五"
WeekName(7) = "星期六"
'天干名称
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
curMonth = month
curDay = day
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
'生成当前公历星期 ==> WeekdayStr
curWeekday = Weekday(curTime)
WeekdayStr = WeekName(curWeekday)
'计算到初始时间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) & ")"
calendar = NongliStr & NongliDayStr
End Function
——————————————PS 在网上借鉴的相关资料
 

 本回答由提问者推荐
 
举报| 答案纠错 | 评论(2) 
8 0 
 
 

 
 
 挑澄流浪  
采纳率:26% 擅长: 手机使用 常见软件 武术搏击 生物学 办公软件 
  

其他回答
 

 

将下面面这段代码保存在模块中,就可以用公式 =nongli(A1) 调用了。
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-29
展开全部
如下的思路请参考:
简单版:
B2单元格就是第一种情况,“2016-9-17”表示农历是九月十七日。该公式是:=TEXT(A2,'[$-130000]YYYY-M-D')。TEXT()用来转化文本格式,这个公式的关键是:[$-130000],它是Excel中阳历转化农历的参数,不过它存在一个问题就是没法计算闰月,估计老外无法理解中国人闰月的概念,凡是闰年,它直接表示一年13个月,道理是一样的。
进阶版:
C2单元格,相比较B2单元格呈现就有了进阶,以中文呈现,并且以天干地支表现年份。公式相对之前肯定复杂:=MID(' 甲乙丙丁戊己庚辛壬癸',MOD(TEXT(A2,'[$-130000]e')-4,10) 1,1)&MID('子丑寅卯辰巳午未申酉 戌亥',MOD(TEXT(A2,'[$-130000]e')-4,12) 1,1)&'年'&TEXT(A2,' [$-130000][DBNum1]m月d日')我们可以分解为两大部分:1)计算年份:MID(' 甲乙丙丁戊己庚辛壬癸',MOD(TEXT(A2,'[$-130000]e')-4,10) 1,1)&MID('子丑寅卯辰巳午未申酉 戌亥',MOD(TEXT(A2,'[$-130000]e')-4,12) 1,1)&'年',这里加了MID()文本提取函数来获取天干地支。2)计算月日:TEXT(A2,' [$-130000][DBNum1]m月d日'),这里增加了参数[DBNum1],表示数值以“一、而二、三......”中文格式显示。两者组合一起的就是C列结果。完美版作为中国人,我们知道“一月”不叫“一月”,叫“正月”;“十二月”不叫“十二月”,叫“腊月”;同样每月前10天,是初一、初二......20日开始是廿、廿一......30日是卅等等。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扬承载0h
2020-08-18
知道答主
回答量:6
采纳率:0%
帮助的人:1981
展开全部
结合前人经验,站在巨人肩膀上做出来的版本。主要改善的有如下2点,其次对于公式都做了注解。

1. 农历每个月初一显示为相应的月份,比如六月初一,则显示为六月,符合一般日历上显示农历的习惯。
2. 农历十号、二十号、及三十号分别显示为初十、二十、三十,二十一至二十九仍显示为廿一、廿二等,三十一也是卅一,修改了其他回答中“初一日”,“十五日”这样的显示方式,更符合习惯。

=IF(TEXT(A1,"[$-130000]d")="1",
* 如果A1格农历日期为1号,则通过下述判断显示为农历月份。"[$-130000]”是用于换算农历,后缀d表示换算出农历日期,下一行中的后缀m则是表示农历月份。
IF(TEXT(A1," [$-130000]m")*1-1=12,"腊",
* 农历十二月显示为腊月,其中[$-130000]m")*1减去1是因为2020年为农历闰4月,不减去1的话,当年农历12月会显示为十三月。
IF(TEXT(A1," [$-130000]m")*1=1," 正",
* 农历一月显示为正月,此处不减一,因为农历一月尚不涉及闰月。
IF(TEXT(A1," [$-130000]m")*1-1=10,"十",
IF(TEXT(A1," [$-130000]m")*1-1=11,"十一",
* 阿拉伯数字10及11转汉字会显示为“一十”和“一十一”这里10月和11月特别处理。
TEXT(TEXT(A1," [$-130000]m")-1,"[DBNum1]"
* 我是2020年8月开始做的日历,所以在解决闰四月这个问题的时候,采取了简单粗暴的办法,就是除了上述正月以外的月份统统都减去1来计算,而没有考虑2、3、4(闰)月份的问题。实际使用中,针对不同年份的农历闰月问题,可以在闰月前采用不减一的公式,即手工去掉上面所有的“-1”,而自闰月后采用减一的公式。因为Excel无法计算农历闰月,所以只能这样曲线救国了。
)))))
&"月",
* 到这里为止,解决了农历初一显示为月份的问题。从第二行开始,也可以单独用于农历月份。

下面开始是解决农历初一以外的日期问题,同时为了解决上面列的第二点改善,也做了简单粗暴的设计。
IF(TEXT(A1,"[$-130000]d")-9<1,"初"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 初一在之前的if里已经处理过了,所以这里简单的用日期-9<1就可以解决初二到初九的问题了。
IF(TEXT(A1,"[$-130000]d")="10","初十",
* 在上面没有才用日期-9≤1把初十解决掉,是因为在实践中发现那样子初十会显示为“初〇”,问题根源疑似是由TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d")这段语句造成的。这里我又采取了简单粗暴的办法,就是另起一行,把初十单独拉出来做。
IF(TEXT(A1,"[$-130000]d")-19<1,"十"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决十一到十九之间的问题,就直接显示十一到十九,逻辑为“十”加上个位的一到九,其中个位的一到九就是通过上述这段语句TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d") 解决的
IF(TEXT(A1,"[$-130000]d")="20","二十",
* 这里是单独解决二十,理由同上面初十
IF(TEXT(A1,"[$-130000]d")-29<1,"廿"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决廿一到廿九,逻辑同十一到十九,下面三十和卅一逻辑基本同上。做完之后才发现阴历似乎并没有三十一号。。。。然而也懒得再去验证和修改了。
IF(TEXT(A1,"[$-130000]d")="30","三十",
IF(TEXT(A1,"[$-130000]d")-39<1,"卅"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
""))))))))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式