Excel VBA - 如何将一列中的今天日期与第二列中的未来日期进行比较

时间:2013-07-23 16:29:09

标签: excel vba date

我在工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个比较这两列的VBA,并在今天之前验证未来的日期三个工作日。如果日期不是今天的三个工作日,我想显示一条警告信息。

有办法做到这一点吗?非常感谢。

3 个答案:

答案 0 :(得分:2)

首先,您需要了解VBA如何“理解”约会。

Excel,Access,VBA和许多MS产品将日期存储为双精度数字;数字的整数部分是日期(自1900年1月1日起计算的天数),数字的小数部分是时间(一天的分数)。

这样可以轻松比较两个日期:您可以比较,添加或减去日期,就像使用数字一样。因此,如果t0t1是两个日期(t1 >= t0),那么表达式t1 - t0将为您提供不同的日期。

现在......你如何计算两个日期之间的“工作日”? VBA中的format()功能可以帮助您。您可以使用此功能返回“星期几”号码。 查看该功能的在线帮助:http://msdn.microsoft.com/en-us/library/office/gg251755.aspx

那么......你怎么把它们放在一起?这是一个例子:

public function bizDaysRemaining(t0 as date, t1 as date) as String
    Dim ans As String, dayCount as Integer, n as Integer
    If t1 < t0 Then
        ans = "Warning"
    Else
        dayCount = 0
        n = 0
        While t0 + n <= t1
            if format(t0 + n, "w", vbMonday) <= 5 Then dayCount = dayCount + 1
            n = n + 1
        Wend
        If dayCount < 3 Then
            ans = "Warning"
        Else
            ans = "There are " & dayCount & " business days remaining"
        End If
    End IF
    bizDaysRemaining = ans
End Function

希望这有助于你

答案 1 :(得分:1)

此外,不需要使用VBA。 Excel将允许您将日期视为数学对象,并且日期周围还有多个公式函数。

查看NETWORKDAYS()函数。

http://office.microsoft.com/en-us/excel-help/networkdays-HP005209190.aspx

答案 2 :(得分:0)

试试这个:

假设A1 =第一个日期

A2 =第二个日期

Sub xtremeexcel()

x = Cells(1, 2) - Cells(1, 1)

If x > 3 Then

  If Weekday(Cells(1, 1)) <= 2 Then

   MsgBox ("Success")

  Else

    If x > 5 Then

        MsgBox ("Success")

    Else

        MsgBox ("fail")

    End If

  End If

Else

    MsgBox ("fail")

End If


End Sub