前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个代替DATEDIF函数的自定义函数

一个代替DATEDIF函数的自定义函数

作者头像
fanjy
发布2021-12-29 15:38:28
1.2K0
发布2021-12-29 15:38:28
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA,自定义函数

大家知道,DATEDIF函数虽然可用,但已不在Excel插入函数可搜索的范围内了。

下面是在excelfox.com看到的一个自定义函数,虽然还存在Bug,但已经很不错了。

代码语言:javascript
复制
Function xlDATEDIF(ByVal StartDate As Date, ByVal EndDate As Date,Interval As String) As Variant
    Dim NumOfYears As Long
    Dim NumOfMonths As Long
    Dim NumOfWeeks As Long
    Dim NumOfDays As Long
    Dim DaysDiff As Long
    Dim ydDaysDiff As Long
    Dim TSerial1 As Double
    Dim TSerial2 As Double
    If StartDate > EndDate Then
        Err.Raise 5
        Exit Function
    End If
    If InStr(1, "Y M D",Interval, vbTextCompare) Then
        Select Case UCase(Interval)
            Case "Y":xlDATEDIF = DateDiff("yyyy", StartDate, EndDate)
            Case "M":xlDATEDIF = DateDiff("m", StartDate, EndDate) + 1
            Case "D":xlDATEDIF = EndDate - StartDate
        End Select
    Else
        NumOfYears =DateDiff("yyyy", StartDate, EndDate)
        DaysDiff = EndDate -StartDate
        TSerial1 =TimeSerial(Hour(StartDate), Minute(StartDate), Second(StartDate))
        TSerial2 =TimeSerial(Hour(EndDate), Minute(EndDate), Second(EndDate))
        If 24 * (TSerial2 -TSerial1) < 0 Then EndDate = DateAdd("d", -1, EndDate)
        StartDate =DateSerial(Year(EndDate), Month(StartDate), Day(StartDate))
        If StartDate > EndDateThen
            StartDate =DateAdd("yyyy", -1, StartDate)
            NumOfYears = NumOfYears- 1
        End If
        ydDaysDiff = EndDate -StartDate
        NumOfMonths =DateDiff("m", StartDate, EndDate) + 1
        StartDate =DateSerial(Year(EndDate), Month(EndDate), Day(StartDate))
        If StartDate > EndDateThen
            StartDate =DateAdd("m", -1, StartDate)
            NumOfMonths = NumOfMonths- 1
        End If
        NumOfDays =Abs(DateDiff("d", StartDate, EndDate))
        Select Case UCase(Interval)
            Case "YM":xlDATEDIF = NumOfMonths
            Case "YD":xlDATEDIF = ydDaysDiff
            Case "MD":xlDATEDIF = NumOfDays
            Case Else
        End Select
    End If
End Function

使用方法:

假设日期在单元格A1和A2中,则公式:

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"y")

返回两日期相差的年数。

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"m")

返回两日期相差的月份数。

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"d")

返回两日期相差的天数。

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"ym")

返回两日期相差的月份数,与年无关。

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"yd")

返回两日期相差的天数,与年无关。

代码语言:javascript
复制
=xlDATEDIF(A1,A2,"md")

返回两日期相差的天数,与年月无关。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档