Option Base 1
Dim rq As Integer '日期
Dim y As Date '农历正月月初一的阳历日期
Dim yts As Variant '农历每月的天数
Dim yy(2) As Integer '农历闰月数、阳历闰年数(闰年为1,不闰年为0)
Dim nl(3, 385) As String '阳历日期字符串、农历日期字符串、农历闰月字符串
Function NONGLI(glrq As Date, nlr As Integer)
Dim X As Integer, i As Integer, k As Integer, n1 As Integer, n2 As Integer
X = Year(glrq)
If X < 1900 Or glrq > #1/28/2101# Then
NONGLI = "?"
Exit Function
End If
'1、将X年的阴阳历等,通过运行程序2,装入数组
If X < 2021 Then Call Array1(X, n1, glrq)
If X > 2020 Then Call Array2(X, n1, glrq)
'2、查找阳历日期所在数组的序号rq
di2bu: rq = 0
If X = 1899 Then
rq = Day(glrq)
Else
For i = 1 To n1
If nl(1, i) = glrq Then rq = i: Exit For
Next i
End If
'3、填写"农历日期"(包括节日、纪念日)
Dim nongli1$, yr$, yuefen$, yf$, rizi$, rz$
Dim jr1 As String, jr2 As String, jr3 As String
nongli1 = nl(2, rq)'农历日期以"2014-2-1"或"2014-闰9-1"的形式表示
yr = Strings.Right(nongli1, Strings.Len(nongli1) - 5) '农历日期以"2-1"或"闰9-1"形式表示yuefen = Strings.Left(yr, Strings.InStrRev(yr, "-") - 1) '农历的月份以"2"或"闰9"形式表示rizi = Strings.Right(yr, Strings.Len(yr) - Strings.InStrRev(yr, "-")) '农历的日子以"2"形式表示Dim yuefenB As Variant, yfB As Variant
yuefenB = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "闰2", "闰3", "闰4", "闰5", "闰6", "闰7", "闰8", "闰9", "闰10", "闰11", "闰12")
yfB = Array("正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月", "闰二月", "闰三月", "闰四月", "闰五月", "闰六月", "闰七月", "闰八月", "闰九月", "闰十月", "闰冬月", "闰腊月")
For i = 1 To 23'农历的月份以汉字形式表示
If yuefen = yuefenB(i) Then yf = yfB(i): Exit For
Next i
Dim rzB As Variant
rzB = Array("初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二","廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十")
For i = 1 To 30
If rizi = i Then rz = rzB(i): Exit For'农历的日子以汉字形式表示
Next i
'农历节日--jr1
If nlr = 3 Then Call nljr(rizi, yuefen, yuefenB, yfB, yr, yts, jr1)
'24节气--ji2
Dim xiaohan As Date
xiaohan = Int(365.242646137797 * Year(glrq) - 693953.924646684)
If glrq = xiaohan Then jr2 = "小寒"
Dim dahan As Date
dahan = Int(365.242629416257 * Year(glrq) - 693939.16865395)
If Year(glrq) = 2082 Then dahan = dahan + 1
If glrq = dahan Then jr2 = "大寒"
Dim lichun As Date
lichun = Int(365.24259976737 * Year(glrq) - 693924.346732722)
If glrq = lichun Then jr2 = "立春"
Dim yushui As Date
yushui = Int(365.242502247697 * Year(glrq) - 693909.331831532)
If Year(glrq) = 2059 Or Year(glrq) = 2092 Then yushui = yushui + 1
If glrq = yushui Then jr2 = "雨水"
Dim jingzhe As Date
jingzhe = Int(365.242419549484 * Year(glrq) - 693894.233446856) If Year(glrq) = 2047 Then jingzhe = jingzhe + 1
If glrq = jingzhe Then jr2 = "惊蛰"
Dim chunfen As Date
chunfen = Int(365.242305278251 * Year(glrq) - 693878.966116765) If Year(glrq) = 2051 Then chunfen = chunfen - 1
If glrq = chunfen Then jr2 = "春分"
Dim qingming As Date
qingming = Int(365.242254377632 * Year(glrq) - 693863.694715595) If glrq = qingming Then jr2 = "清明"
Dim guyu As Date
guyu = Int(365.242150678344 * Year(glrq) - 693848.193860396)
If Year(glrq) = 2045 Then guyu = guyu - 1
If glrq = guyu Then jr2 = "谷雨"
Dim lixia As Date
lixia = Int(365.242041986455 * Year(glrq) - 693832.541539829)
If Year(glrq) = 1973 Or Year(glrq) = 2035 Then lixia = lixia - 1
If glrq = lixia Then jr2 = "立夏"
Dim xiaoman As Date
xiaoman = Int(365.241895042148 * Year(glrq) - 693816.712806842)
If Year(glrq) = 2070 Then xiaoman = xiaoman - 1
If glrq = xiaoman Then jr2 = "小满"
Dim mangzhong As Date
mangzhong = Int(365.241908822174 * Year(glrq) - 693801.095841903)
If Year(glrq) = 2026 Or Year(glrq) = 2055 Or Year(glrq) = 2088 Then mangzhong = mangzhong -1
If glrq = mangzhong Then jr2 = "芒种"
Dim xiazhi As Date
xiazhi = Int(365.242316100823 * Year(glrq) - 693786.181888162)
If Year(glrq) = 2019 Or Year(glrq) = 2023 Or Year(glrq) = 2048 Or Year(glrq) = 2052 Or Year(glrq)= 2056 Or Year(glrq) = 2081 Or Year(glrq) = 2085 Or Year(glrq) = 2089 Then xiazhi = xiazhi - 1If glrq = xiazhi Then jr2 = "夏至"
Dim xiaoshu As Date
xiaoshu = Int(365.241837274251 * Year(glrq) - 693769.530669936)
If Year(glrq) = 2078 Then xiaoshu = xiaoshu - 1
If glrq = xiaoshu Then jr2 = "小暑"
Dim dashu As Date
dashu = Int(365.241703595146 * Year(glrq) - 693753.549346385)
If glrq = dashu Then jr2 = "大暑"
Dim liqiu As Date
liqiu = Int(365.241890113665 * Year(glrq) - 693738.222492901)
If Year(glrq) = 2035 Or Year(glrq) = 2068 Or Year(glrq) = 2097 Then liqiu = liqiu - 1
If glrq = liqiu Then jr2 = "立秋"
Dim chushu As Date
chushu = Int(365.242316100823 * Year(glrq) - 693723.45493336)
If Year(glrq) = 2020 Or Year(glrq) = 2049 Or Year(glrq) = 2053 Then chushu = chushu - 1If glrq = chushu Then jr2 = "处暑"
Dim bailu As Date
bailu = Int(365.242316100823 * Year(glrq) - 693707.939588367)
If glrq = bailu Then jr2 = "白露"
Dim qiufen As Date
qiufen = Int(365.242085926645 * Year(glrq) - 693692.119710911)
If glrq = qiufen Then jr2 = "秋分"
Dim hanlu As Date
hanlu = Int(365.242316100823 * Year(glrq) - 693677.304821888)
If Year(glrq) = 2073 Then hanlu = hanlu - 1
If glrq = hanlu Then jr2 = "寒露"
Dim shuangjiang As Date
shuangjiang = Int(365.242316100823 * Year(glrq) - 693662.177281271)
If glrq = shuangjiang Then jr2 = "霜降"
Dim lidong As Date
lidong = Int(365.242316100823 * Year(glrq) - 693647.185448183)
If glrq = lidong Then jr2 = "立冬"
Dim xiaoxue As Date
xiaoxue = Int(365.242316100823 * Year(glrq) - 693632.293388525)
If Year(glrq) = 1912 Then xiaoxue = xiaoxue - 1
If glrq = xiaoxue Then jr2 = "小雪"
Dim daxue As Date
daxue = Int(365.242199074074 * Year(glrq) - 693617.264427083)
If Year(glrq) = 2020 Or Year(glrq) = 2053 Or Year(glrq) = 2082 Then daxue = daxue + 1If glrq = daxue Then jr2 = "大雪"
Dim dongzhi As Date
dongzhi = Int(365.242615913523 * Year(glrq) - 693603.343641496)
If Year(glrq) = 2054 Or Year(glrq) = 2087 Then dongzhi = dongzhi + 1
If glrq = dongzhi Then jr2 = "冬至一九第一天"
For i = 10 To 73 Step 9
IfMonth(glrq)<>12Thendongzhi=Int(365.242615913523*(Year(glrq)-1)-
693603.343641496): If Year(glrq) - 1 = 2054 Or Year(glrq) - 1 = 2087 Then dongzhi = dongzhi +1
If i = glrq - dongzhi + 1 Then
If i = 10 Then jr2 = jr2 & "二九第一天": Exit For
If i = 19 Then jr2 = jr2 & "三九第一天": Exit For
If i = 28 Then jr2 = jr2 & "四九第一天": Exit For
If i = 37 Then jr2 = jr2 & "五九第一天": Exit For
If i = 46 Then jr2 = jr2 & "六九第一天": Exit For
If i = 55 Then jr2 = jr2 & "七九第一天": Exit For
If i = 64 Then jr2 = jr2 & "八九第一天": Exit For
If i = 73 Then jr2 = jr2 & "九九第一天": Exit For
End If
Next i
'公历节日--jr3
If nlr = 3 Then Call gljr(glrq, jr3)
'4、日期的天干地支
di4bu: If nlr <> 5 Then GoTo di5bu
Dim ganzhiB As Variant
ganzhiB = Array("甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉", "甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未", "甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳", "甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯", "甲辰", "乙巳", "丙午", "丁未", "戊申","己酉", "庚戌", "辛亥", "壬子", "癸丑", "甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申","辛酉", "壬戌", "癸亥")
'(1)把农历年份的天干地支赋值于ngz,农历1984年是:甲子年
Dim ns%, ngz$
If X = Year(glrq) And glrq < lichun Then'春节后立春时,小于立春的日子为上一年:X-1
ns = X - 1 - 1983
ElseIf X = Year(glrq) - 1 And glrq >= lichun Then ns = X + 1 - 1983 '春节前立春时,大于等于立春的日子为下一年:X+1
Else
ns = X - 1983'其他日子为当年:X
End If
ns = ns Mod 60
If ns <= 0 Then ns = ns + 60 '年干支数
ngz = ganzhiB(ns)'年干支
'(2)把农历月份的天干地支赋值于ygz
Dim yfs%, ntgs%, ytgs%, ydzs%, ygzs%, ygz$
If glrq < xiaohan Then'农历月份数'小寒
yfs = 11
ElseIf glrq < lichun Then yfs = 12'立春
ElseIf glrq < jingzhe Then yfs = 1'惊蛰
ElseIf glrq < qingming Then yfs = 2'清明
ElseIf glrq < lixia Then yfs = 3'立夏
ElseIf glrq < mangzhong Then yfs = 4'芒种
ElseIf glrq < xiaoshu Then yfs = 5'小暑
ElseIf glrq < liqiu Then yfs = 6'立秋
ElseIf glrq < bailu Then yfs = 7'白露
ElseIf glrq < hanlu Then yfs = 8'寒露
ElseIf glrq < lidong Then yfs = 9'立冬
ElseIf glrq < daxue Then yfs = 10'大雪
Else
yfs = 11
End If
ntgs = ns Mod 5: If ntgs = 0 Then ntgs = 5'年天干数(1—5)ytgs = (ntgs * 2 + yfs) Mod 10: If ytgs = 0 Then ytgs = 10'月天干数(口诀:年上起月不麻烦,月干周期为五年。从一到五数年干,数到当年就算完;此数两倍加月份,个位之数月干选。)ydzs = yfs + 2: If ydzs > 12 Then ydzs = ydzs - 12'月地支数(口诀:月份之数加上二,超出十二减十二。)
ygzs = ((ytgs - ydzs + 12) Mod 12) * 5 + ytgs'月干支数(口诀:天干减地支,不够借十二;其差乘以五,再加天干补。)
ygz = ganzhiB(ygzs)'月干支
'(3)把农历日的天干地支赋值于rgz,1984-1-31是:甲子日
Dim rs%, rgz$
rs = glrq - #1/30/1984#: rs = rs Mod 60: If rs <= 0 Then rs = rs + 60 '日干支数
rgz = ganzhiB(rs)'日干支'5、定义农历函数--NONGLI
di5bu: Select Case nlr '判断nlr的值。
Case 1
NONGLI = nongli1'nlr=1时,函数NONGLI为"yyyy-mm-dd"的形式
Case 2
NONGLI = yr'nlr=1时,函数NONGLI为"mm-dd"的形式
Case 3
If jr1 & jr2 & jr3 <> "" Then NONGLI = jr1 & jr2 & jr3 Else NONGLI = rz 'nlr=3时,函数NONGLI是节日时为"××"节日形式,否则为"初十"的形式
Case 4
NONGLI = rz'nlr=4时,函数NONGLI为"初十"的形式
Case 5
NONGLI = ngz & " " & ygz & " " & rgz'nlr=时,函数NONGLI为"甲子丙寅丙寅"的形式Case Else
NONGLI = yf & rz'nlr≠1~5的整数时,函数NONGLI的形式,同nlr=1时
End Select
Exit Function
'zichengxu2:
End Function
Sub Array1(X As Integer, n1 As Integer, glrq As Date)
''********************装数组程序:(1900--2020),返回农历年份--a (即原X)和此年总天数--b*****************''
zichengxu2:
1899: If X = 1899 Then y = #1/1/1899#: yts = Array(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0): GoTozuihou
1900: If X = 1900 Then y = #1/31/1900#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 8): GoTo zuihou
If X > 2020 Then Exit Sub Else If X >= 2000 Then GoTo 2000 Else If X >= 1980 Then GoTo1980 Else If X >= 1960 Then GoTo 1960 Else If X >= 1940 Then GoTo 1940
zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 0, 0): GoTo zuihou
1902: If X = 1902 Then y = #2/8/1902#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 0, 0): GoTo zuihou
1903: If X = 1903 Then y = #1/29/1903#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 5): GoTo zuihou
1904: If X = 1904 Then y = #2/16/1904#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 0, 0): GoTo zuihou
1905: If X = 1905 Then y = #2/4/1905#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1906: If X = 1906 Then y = #1/25/1906#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 4): GoTo zuihou
1907: If X = 1907 Then y = #2/13/1907#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1908: If X = 1908 Then y = #2/2/1908#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 30, 29, 30, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1909: If X = 1909 Then y = #1/22/1909#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 2): GoTo zuihou
zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 0, 0): GoTo zuihou
1911: If X = 1911 Then y = #1/30/1911#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 6): GoTo zuihou
1912: If X = 1912 Then y = #2/18/1912#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1913: If X = 1913 Then y = #2/6/1913#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 0, 0): GoTo zuihou
1914: If X = 1914 Then y = #1/26/1914#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 5): GoTo zuihou
1915: If X = 1915 Then y = #2/14/1915#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 0, 0): GoTo zuihou
1916: If X = 1916 Then y = #2/3/1916#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1917: If X = 1917 Then y = #1/23/1917#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 2): GoTo zuihou
1918: If X = 1918 Then y = #2/11/1918#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 0, 0): GoTo zuihou
zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 7): GoTo zuihou
1920: If X = 1920 Then y = #2/20/1920#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 0, 0): GoTo zuihou
1921: If X = 1921 Then y = #2/8/1921#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 0): GoTo zuihou
1922: If X = 1922 Then y = #1/28/1922#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 5): GoTo zuihou
1923: If X = 1923 Then y = #2/16/1923#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 0): GoTo zuihou
1924: If X = 1924 Then y = #2/5/1924#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 0, 0): GoTo zuihou
1925: If X = 1925 Then y = #1/24/1925#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 4): GoTo zuihou
1926: If X = 1926 Then y = #2/13/1926#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 0): GoTo zuihou
1927: If X = 1927 Then y = #2/2/1927#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 29, 30, 29, 30, 30, 30, 0, 0): GoTo zuihou
zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 30, 2): GoTo zuihou
1929: If X = 1929 Then y = #2/10/1929#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 0, 0): GoTo zuihou
1930: If X = 1930 Then y = #1/30/1930#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 6): GoTo zuihou
1931: If X = 1931 Then y = #2/17/1931#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1932: If X = 1932 Then y = #2/6/1932#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 0): GoTo zuihou
1933: If X = 1933 Then y = #1/26/1933#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 5): GoTo zuihou
1934: If X = 1934 Then y = #2/14/1934#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 30, 29, 30, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1935: If X = 1935 Then y = #2/4/1935#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 0): GoTo zuihou
1936: If X = 1936 Then y = #1/24/1936#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 29, 3): GoTo zuihou
zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 0, 0): GoTo zuihou
1938: If X = 1938 Then y = #1/31/1938#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 7): GoTo zuihou
1939: If X = 1939 Then y = #2/19/1939#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1940: If X = 1940 Then y = #2/8/1940#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1941: If X = 1941 Then y = #1/27/1941#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 6): GoTo zuihou
1942: If X = 1942 Then y = #2/15/1942#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1943: If X = 1943 Then y = #2/5/1943#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1944: If X = 1944 Then y = #1/25/1944#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 4): GoTo zuihou
1945: If X = 1945 Then y = #2/13/1945#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 30, 0, 0): GoTo zuihou
zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1947: If X = 1947 Then y = #1/22/1947#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 2): GoTo zuihou
1948: If X = 1948 Then y = #2/10/1948#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1949: If X = 1949 Then y = #1/29/1949#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 7): GoTo zuihou
1950: If X = 1950 Then y = #2/17/1950#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1951: If X = 1951 Then y = #2/6/1951#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1952: If X = 1952 Then y = #1/27/1952#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 5): GoTo zuihou
1953: If X = 1953 Then y = #2/14/1953#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 30, 29, 30, 30, 29, 30, 29, 0, 0): GoTo zuihou
1954: If X = 1954 Then y = #2/3/1954#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 0, 0): GoTo zuihou
zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 3): GoTo zuihou
1956: If X = 1956 Then y = #2/12/1956#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 0, 0): GoTo zuihou
1957: If X = 1957 Then y = #1/31/1957#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 29, 8): GoTo zuihou
1958: If X = 1958 Then y = #2/18/1958#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1959: If X = 1959 Then y = #2/8/1959#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1960: If X = 1960 Then y = #1/28/1960#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 6): GoTo zuihou
1961: If X = 1961 Then y = #2/15/1961#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1962: If X = 1962 Then y = #2/5/1962#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 0): GoTo zuihou
1963: If X = 1963 Then y = #1/25/1963#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 4): GoTo zuihou
zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 0, 0): GoTo zuihou
1965: If X = 1965 Then y = #2/2/1965#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 0, 0): GoTo zuihou
1966: If X = 1966 Then y = #1/21/1966#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 3): GoTo zuihou
1967: If X = 1967 Then y = #2/9/1967#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 30, 0, 0): GoTo zuihou
1968: If X = 1968 Then y = #1/30/1968#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 7): GoTo zuihou
1969: If X = 1969 Then y = #2/17/1969#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1970: If X = 1970 Then y = #2/6/1970#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1971: If X = 1971 Then y = #1/27/1971#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 5): GoTo zuihou
1972: If X = 1972 Then y = #2/15/1972#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
zichengxu2 Else yts =Array(30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 0, 0): GoTo zuihou
1974: If X = 1974 Then y = #1/23/1974#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 4): GoTo zuihou
1975: If X = 1975 Then y = #2/11/1975#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 0, 0): GoTo zuihou
1976: If X = 1976 Then y = #1/31/1976#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 8): GoTo zuihou
1977: If X = 1977 Then y = #2/18/1977#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 0, 0): GoTo zuihou
1978: If X = 1978 Then y = #2/7/1978#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 0): GoTo zuihou
1979: If X = 1979 Then y = #1/28/1979#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 6): GoTo zuihou
1980: If X = 1980 Then y = #2/16/1980#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 0, 0): GoTo zuihou
1981: If X = 1981 Then y = #2/5/1981#: If glrq < y Then X = X - 1: GoTo zichengxu2 Else yts =Array(29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 0, 0): GoTo zuihou
20个Excel时间函数的使用方法 1.DATE 用途:返回代表特定日期的序列号。 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。Month代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运算。Day 代表在该月份中第几天的数字。如果day 大于该月份的最大天数时,将从指定月份的第一天开始往上累加。 注意:Excel按顺序的序列号保存日期,这样就可以对其进行计算。如果工作簿使用的是1900日期系统,则Excel会将1900年1月1日保存为序列号1。同理,会将1998 年1月1日保存为序列号35796,因为该日期距离1900年1月1日为35795天。 实例:如果采用1900日期系统(Excel默认),则公式“=D ATE(2001,1,1)”返回36892。 2.DATEVaLUE 用途:返回date_text所表示的日期的序列号。该函数的主要用途是将文字表示的日期转换成一个序列号。 语法:DATEVaLUE(date_text) 参数:Date_text是用Excel日期格式表示日期的文本。在使用1900日期系统中,date_text必须是1900 年1月1日到9999年12月31日之间的一个日期;而在1904日期系统中,date_text必须是1904年1月1日到9999年12月31日之间的一个日期。如果date_text超出上述范围,则函数DATEVaLUE返回错误值#value!。 如果省略参数date_text中的年代,则函数DATEVaLUE使用电脑系统内部时钟的当前年代,且date_text中的时间信息将被忽略。 实例:公式“=DATEVaLUE("2001/3/5")”返回36955,DATEVaLUE("2-26")返回36948。 3.DAY 用途:返回用序列号(整数1到31)表示的某日期的天数,用整数 1 到31 表示。 语法:DAY(serial_number) 参数:Serial_number是要查找的天数日期,它有多种输入方式:带引号的文本串(如"1998/01/30")、序列号(如1900日期系统的35825表示的1998年1月30日),以及其他公式或函数的结果(如DATEVaLUE("1998/1/30"))。 实例:公式“=DAY("2001/1/27")”返回27,=DAY(35825)返回30, =DAY(DATEVaLUE("2001/1/25"))返回25。
excel使用日期和时间函数公式 excel使用日期和时间函数公式excel如何显示当前日期函数公式 显示当前年份函数:【=year(now())】 显示当前月份函数:【=month(now())】 显示当前日期函数:【=day((now()))】 显示当前星期函数:【=text(now(),"aaaa")】 显示当前准确时间:【=text(now(),"hh:mm:ss")】 显示当前年月日:【=today()】 显示当前年月日和时间:【=now()】 使用方法:直接在某单元格输入以上函数公式即可获得结果。 excel如何通过日期判断星期几 通过日期显示星期几:【=weekday(a2,2)】 通过日期显示中文带星期:【=text(a2,"aaaa")】 通过日期计算中文星期:【=text(a4,"aaa")】 通过日期计算英文星期简写:【=text(a5,"ddd")】 通过日期计算英文星期:【=text(a5,"dddd")】 使用方法:指定输入日期的单元格,输入以上函数公式即可获取星期。 excel如何求月份天数函数 求某日期的月份天数:
【=day(date(year(a2),month(a2)+1,0))】使用方法:需要指定包含日期的单元格。 直接求当前月份天数:【=day(eomonth(now(),0))】使用方法:直接在某单元格输入以上公式即可获取天数。 求当前月份天数减去周六和周日:【=sumproduct(--(mod(row(indirect(date(year(now()),month (now()),1)&":"&date(year(now()),month(now())+1,0))),7)>1 ))】使用方法:直接在某单元格输入以上公式即可获取天数。 excel快捷键快速获取日期时间 当然,在有些情况下,我们可以直接通过excel快捷键来获取当前的日期和时间。 获取当前年月日快捷键:【ctrl+;】 获取当前时间快捷键:【ctrl+shift+;】 获取年月日和时间:先在单元格使用【ctrl+;】,然后空格在使用快捷键【ctrl+shift+;】
EXCEL计算两个日期之间天数的函数语法 DATEDIF(start_date,end_date,unit) Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如"2001/1/30")、系列数(例如,如果使用1900 日期系统则36921 代表2001 年 1 月30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅NOW。 End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。 Unit 为所需信息的返回类型。 Unit 返回 "Y" 时间段中的整年数。 "M" 时间段中的整月数。 "D" 时间段中的天数。 "MD" start_date 与end_date 日期中天数的差。忽略日期中的月和年。 "YM" start_date 与end_date 日期中月数的差。忽略日期中的日和年。 "YD" start_date 与end_date 日期中天数的差。忽略日期中的年。 说明 Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用1900 日期系统,则Excel 会将1900 年1 月1 日保存为系列数1。而如果工作簿使用1904 日期系统,则Excel 会将1904 年1 月1 日保存为系列数0,(而将1904 年1 月2 日保存为系列数1)。例如,在1900 日期系统中Excel 将1998 年 1 月 1 日保存为系列数35796,因为该日期距离1900 年 1 月 1 日为35795 天。请查阅Microsoft Excel 如何存储日期和时间。 Excel for Windows 和Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅NOW。 示例 DATEDIF("2001/1/1","2003/1/1","Y") 等于2,即时间段中有两个整年。 DATEDIF("2001/6/1","2002/8/15","D") 等于440,即在2001 年6 月1 日和2002 年8 月15 日之间有440 天。 DATEDIF("2001/6/1","2002/8/15","YD") 等于75,即在6 月1 日与8 月15 日之间有75 天,忽略日期中的年。 DATEDIF("2001/6/1","2002/8/15","MD") 等于14,即开始日期 1 和结束日期15 之间的差,忽略日期中的年和月。
1.DATE 用途:返回代表特定日期的序列号。 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。Month代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运算。Day 代表在该月份中第几天的数字。如果day 大于该月份的最大天数时,将从指定月份的第一天开始往上累加。 注意:Excel按顺序的序列号保存日期,这样就可以对其进行计算。如果工作簿使用的是1900日期系统,则Excel会将1900年1月1日保存为序列号1。同理,会将1998年1月1日保存为序列号35796,因为该日期距离1900年1月1日为35795天。 实例:如果采用1900日期系统(Excel默认),则公式“=DATE(2001,1,1)”返回36892。 2.DATEVaLUE 用途:返回date_text所表示的日期的序列号。该函数的主要用途是将文字表示的日期转换成一个序列号。 语法:DATEVaLUE(date_text) 参数:Date_text是用Excel日期格式表示日期的文本。在使用1900日期系统中,date_text必须是1900年1月1日到9999年12月31日之间的一个日期;而在1904日期系统中,date_text必须是1904年1月1日到9999年12月31日之间的一个日期。如果date_text超出上述范围,则函数DATEVaLUE返回错误值#value!。 如果省略参数date_text中的年代,则函数DATEVaLUE使用电脑系统内部时钟的当前年代,且date_text中的时间信息将被忽略。 实例:公式“=DATEVaLUE("2001/3/5")”返回36955,DATEVaLUE("2-26")返回36948。 3.DAY 用途:返回用序列号(整数1到31)表示的某日期的天数,用整数1 到31 表示。 语法:DAY(serial_number) 参数:Serial_number是要查找的天数日期,它有多种输入方式:带引号的文本串(如"1998/01/30")、序列号(如1900日期系统的35825表示的1998年1月30日),以及其他公式或函数的结果(如DATEVaLUE("1998/1/30"))。 实例:公式“=DAY("2001/1/27")”返回27,=DAY(35825)返回30, =DAY(DATEVaLUE("2001/1/25"))返回25。 4.DAYS360 用途:按照一年360天的算法(每个月30天,一年共计12 个月),返回两日期间相差的天数。 语法:DAYS360(start_date,end_date,method)
Excel函数应用教程:日期时间函数 1.DATE 用途:返回代表特定日期的序列号. 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel forMacintosh使用1904日期系统。Month代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运算。Day代表在该月份中第几天的数字。如果 day 大于该月份的最大天数时,将从指定月份的第一天开始往上累加。 注意:Excel按顺序的序列号保存日期,这样就可以对其进行计算。如果工作簿使用的是1900日期系统,则Excel会将1900年1月1日保存为序列号1。同理,会将1998年1月1日保存为序列号35796,因为该日期距离1900年1月1日为35795天。 实例:如果采用1900日期系统(Excel默认),则公式“=DATE(2001,1,1)”返回36892。 2.DATEVaLUE 用途:返回date_text所表示的日期的序列号。该函数的主要用途是将文字表示的日期转换成一个序列号。 语法:DATEVaLUE(date_text) 参数:Date_text是用Excel日期格式表示日期的文本。在使用1900日期系统 中,date_text必须是1900年1月1日到9999年12月31日之间的一个日期;而在1904日期系统中,date_text必须是1904年1月1日到9999年12月31日之间的一个日期。如果date_text超出上述范围,则函数DATEVaLUE返回错误值#value!。 如果省略参数date_text中的年代,则函数DATEVaLUE使用电脑系统内部时钟的当前年代,且date_text中的时间信息将被忽略。 实例:公式“=DATEVaLUE(”2001/3/5")”返回36955,DATEVaLUE(”2-26")返回36948. 3.DAY 用途:返回用序列号(整数1到31)表示的某日期的天数,用整数 1 到31 表示。 语法:DAY(serial_number)
? 分别提取Excel单元格中的日期和时间 ?| ?1 ?2 ?3 如何提取Excel单元格中的日期和时间?只需要使用TEXT函数配合字符输出格式即可分别取出。 方法/步骤 1. 1 先看下表。 2. 2 A列是完整的日期时间综合格式。现在,我们要在B列取出A列中的日期,在C列取出A列的时间。 一、提取日期的方法 如下图。
选择B2单元格,在FX函数输入框中,输入 =TEXT(A2,"yyyy-mm-dd") 即可。 其中,TEXT函数表示要将A2单元格的内容转换为字符形式。而yyyy-mm-dd则是字符的格式,代表年-月-日。 二、提取时间的方法 如下图。 4. 4 选择C4单元格,在FX函数输入框中,输入 =TEXT(A4,"h:mm") 即可。 其中,TEXT函数表示要将A4单元格的内容转换为字符形式。而h:mm则是字符的格式,代表小时:分。 全文阅读分步阅读 加入杂志 步骤 ?1 ?2 ?3 如何提取Excel单元格中的日期和时间?只需要使用TEXT函数配合字符输出格式即可分别取出。 方法/步骤
先看下表。 2. 2 A列是完整的日期时间综合格式。现在,我们要在B列取出A列中的日期,在C列取出A列的时间。 一、提取日期的方法 如下图。 3. 3 选择B2单元格,在FX函数输入框中,输入 =TEXT(A2,"yyyy-mm-dd") 即可。 其中,TEXT函数表示要将A2单元格的内容转换为字符形式。而yyyy-mm-dd则是字符的格式,代表年-月-日。 二、提取时间的方法 如下图。 4. 4
选择C4单元格,在FX函数输入框中,输入 =TEXT(A4,"h:mm") 即可。 其中,TEXT函数表示要将A4单元格的内容转换为字符形式。而h:mm则是字符的格式,代表小时:分。
excel常用函数公式及技巧搜集(常用的)【身份证信息?提取】 从身份证号码中提取出生年月日 =TEXT(MID(A1,7,6+(LEN(A1)=18)*2),"#-00-00")+0 =TEXT(MID(A1,7,6+(LEN(A1)=18)*2),"#-00-00")*1 =IF(A2<>"",TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00")+0,) 显示格式均为yyyy-m-d。(最简单的公式,把单元格设置为日期格式) =IF(LEN(A2)=15,"19"&MID(A2,7,2)&"-"&MID(A2,9,2)&"-"&MID(A2,11,2),MID(A2,7,4)& "-"&MID(A2,11,2)&"-"&MID(A2,13,2)) 显示格式为yyyy-mm-dd。(如果要求为“1995/03/29”格式的话,将”-”换成”/”即可) =IF(D4="","",IF(LEN(D4)=15,TEXT(("19"&MID(D4,7,6)),"0000年00月00日 "),IF(LEN(D4)=18,TEXT(MID(D4,7,8),"0000年00月00日")))) 显示格式为yyyy年mm月dd日。(如果将公式中“0000年00月00日”改成“0000-00-00”,则显示格式为yyyy-mm-dd) =IF(LEN(A1:A2)=18,MID(A1:A2,7,8),"19"&MID(A1:A2,7,6)) 显示格式为yyyymmdd。 =TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"#-00-00")+0 =IF(LEN(A2)=18,MID(A2,7,4)&-MID(A2,11,2),19&MID(A2,7,2)&-MID(A2,9,2)) =MID(A1,7,4)&"年"&MID(A1,11,2)&"月"&MID(A1,13,2)&"日" =IF(A1<>"",TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"#-00-00")) 从身份证号码中提取出性别 =IF(MOD(MID(A1,15,3),2),"男","女") (最简单公式) =IF(MOD(RIGHT(LEFT(A1,17)),2),"男","女") =IF(A2<>””,IF(MOD(RIGHT(LEFT(A2,17)),2),”男”,”女”),) =IF(V ALUE(LEN(ROUND(RIGHT(A1,1)/2,2)))=1,"男","女") 从身份证号码中进行年龄判断 =IF(A3<>””,DATEDIF(TEXT((LEN(A3)=15*19&MID(A3,7,6+(LEN(A3)=18*2),”#-00-00”),T ODAY(),”Y”),) =DATEDIF(A1,TODAY(),“Y”) (以上公式会判断是否已过生日而自动增减一岁) =YEAR(NOW())-MID(E2,IF(LEN(E2)=18,9,7),2)-1900 =YEAR(TODAY())-IF(LEN(A1)=15,"19"&MID(A1,7,2),MID(A1,7,4)) =YEAR(TODAY())-V ALUE(MID(B1,7,4))&"岁" =YEAR(TODAY())-IF(MID(B1,18,1)="",CONCATENATE("19",MID(B1,7,2)),MID(B1,7,4)) 按身份证号号码计算至今天年龄 =DATEDIF(TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"#-00-00"),TODAY(),"y") 以2006年10月31日为基准日,按按身份证计算年龄(周岁)的公式
e x c e l日期时间函数 This model paper was revised by the Standardization Office on December 10, 2020
日期时间函数 用途:返回代表特定日期的序列号。 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。Month代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运算。Day代表在该月份中第几天的数字。如果 day 大于该月份的最大天数时,将从指定月份的第一天开始往上累加。 注意:Excel按顺序的序列号保存日期,这样就可以对其进行计算。如果工作簿使用的是1900日期系统,则Excel会将1900年1月1日保存为序列号1。同理,会将1998 年1月1日保存为序列号35796,因为该日期距离1900年1月1日为35795天。 实例:如果采用1900日期系统(Excel默认),则公式“=DATE(2001,1,1)”返回36892。 用途:返回date_text所表示的日期的序列号。该函数的主要用途是将文字表示的日期转换成一个序列号。 语法:DATEVaLUE(date_text)
参数:Date_text是用Excel日期格式表示日期的文本。在使用1900日期系统中,date_text必须是1900年1月1日到9999年12月31日之间的一个日期;而在1904日期系统中,date_text必须是1904年1月1日到9999年12月31日之间的一个日期。如果date_text超出上述范围,则函数DATEVaLUE返回错误值#value!。 如果省略参数date_text中的年代,则函数DATEVaLUE使用电脑系统内部时钟的当前年代,且date_text中的时间信息将被忽略。 实例:公式“=DATEVaLUE("2001/3/5")”返回36955,DATEVaLUE("2-26")返回36948。 用途:返回用序列号(整数1到31)表示的某日期的天数,用整数 1 到 31 表示。 语法:DAY(serial_number) 参数:Serial_number是要查找的天数日期,它有多种输入方式:带引号的文本串(如"1998/01/30")、序列号(如1900日期系统的35825表示的1998年1月30日),以及其他公式或函数的结果(如DATEVaLUE("1998/1/30"))。 实例:公式“=DAY("2001/1/27")”返回27,=DAY(35825)返回30, =DAY(DATEVaLUE("2001/1/25"))返回25。 用途:按照一年360天的算法(每个月30天,一年共计12 个月),返回两日期间相差的天数。
日期时间函数 1.DATE 用途:返回代表特定日期的序列号。 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。Month 代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运算。Day代表在该月份中第几天的数字。如果day 大于该月份的最大天数时,将从指定月份的第一天开始往上累加。 注意:Excel按顺序的序列号保存日期,这样就可以对其进行计算。如果工作簿使用的是1900日期系统,则Excel 会将1900年1月1日保存为序列号1。同理,会将1998年1月1日保存为序列号35796,因为该日期距离1900年1月1日为35795天。 实例:如果采用1900日期系统(Excel默认),则公式“=DATE(2001,1,1)”返回36892。
2.DATEVaLUE 用途:返回date_text所表示的日期的序列号。该函数的主要用途是将文字表示的日期转换成一个序列号。 语法:DATEVaLUE(date_text) 参数:Date_text是用Excel日期格式表示日期的文本。在使用1900日期系统中,date_text必须是1900年1月1日到9999年12月31日之间的一个日期;而在1904日期系统中,date_text必须是1904年1月1日到9999年12月31日之间的一个日期。如果date_text超出上述范围,则函数DATEVaLUE返回错误值#value!。 如果省略参数date_text中的年代,则函数DATEVaLUE使用电脑系统内部时钟的当前年代,且 date_text中的时间信息将被忽略。 实例:公式“=DATEVaLUE("2001/3/5")”返回36955,DATEVaLUE("2-26")返回36948。 3.DAY 用途:返回用序列号(整数1到31)表示的某日期的天数,用整数 1 到31 表示。
Excel2010 日期函数的加减怎么做 篇一:Excel 时间加减函数 TMC Function TMC(time_text, minu) '时间格式:2012-1-11 16:28:14 Dim t2, t3, t4, y, m, d, zong_miao, miao1, miao2, shi, fen, miao, shi1, fen1, miao3 Dim t1, m1 Dim flag1 As Boolean Dim flag2 As Boolean t1 = time_text m1 = -minu flag1 = False flag2 = False If IsNumeric(m1) Then flag2 = True End If If IsDate(t1) Then flag1 = True End If If t1 = "" Or m1 = "" Or flag2 = False Or flag1 = False Then TMC = "" Exit Function End If y = Year(t1) m = Month(t1) d = Day(t1) shi = Hour(t1) fen = Minute(t1) miao = Second(t1) If shi = 0 Then shi = 24 End If zong_miao = shi * 3600 + fen * 60 + miao miao1 = m1 * 60 miao2 = zong_miao - miao1 shi1 = Int(miao2 / 3600) 1 / 8