VBA之计算两个日期之间相差几点几个月

计算选中的Excel单元格中两个日期之间相差几点几个月

日期格式如下(起始日期-结束日期):
YYYY/MM/DD-YYYY/MM/DD

Sub CalcMonth()
    'I Love you, Baby!
    Dim BegDate, EndDate, Msg
    Dim y, m, d, num
    Dim i, j, cnt, start, over

    'BegDate = InputBox("请输入起始日期:", , Format(Date, "yyyy/mm/dd"))
    'EndDate = InputBox("请输入结束日期:", , Format(Date, "yyyy/mm/dd"))

    'i行j列

    'MsgBox Selection.Count
    'MsgBox Range(Selection.Address).Row
    'MsgBox Range(Selection.Address).Column

    ActiveSheet.Columns(Range(Selection.Address).Column + 1).Insert

    ActiveSheet.Columns(Range(Selection.Address).Column + 1).Interior.ColorIndex = xlNone
    ActiveSheet.Columns(Range(Selection.Address).Column + 1).ColumnWidth = 8
    ActiveSheet.Columns(Range(Selection.Address).Column + 1).HorizontalAlignment = xlCenter
    ActiveSheet.Columns(Range(Selection.Address).Column + 1).VerticalAlignment = xlCenter

    i = Range(Selection.Address).Row
    j = Range(Selection.Address).Column
    cnt = Selection.Count
    start = Range(Selection.Address).Row
    over = Range(Selection.Address).Row + cnt - 1

    For i = start To over
        num = 0
        num = Application.WorksheetFunction.Search("-", ActiveSheet.Cells(i, j))
        'MsgBox num

        BegDate = VBA.Mid(ActiveSheet.Cells(i, j), num - 10, 10)
        EndDate = VBA.Mid(ActiveSheet.Cells(i, j), num + 1, 10)

        'MsgBox BegDate
        'MsgBox EndDate

        y = 0
        m = 0
        d = 0

        d = Day(EndDate) - Day(BegDate)
        If d < 0 Then
            m = m - 1
            d = d + 30
        End If
        m = m + Month(EndDate) - Month(BegDate)
        If m < 0 Then
            y = y - 1
            m = m + 12
        End If
        'MsgBox Year(EndDate)
        'MsgBox Year(BegDate)
        y = y + Year(EndDate) - Year(BegDate)
        If y < 0 Then
            MsgBox "开始日期必须小于等于结束日期!"
        Else
            res = y * 12 + m + d / 30
            'MsgBox "两者相差" & Round(res, 2) & "个月"
            'CopyToClipbox Round(res, 2)
            ActiveSheet.Cells(i, j + 1) = Round(res, 2)
        End If
    Next
End Sub

Sub CopyToClipbox(strText As String)
    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText strText
        .PutInClipboard
    End With
End Sub
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值