我在工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个比较这两列的VBA,并在今天之前验证未来的日期三个工作日。如果日期不是今天的三个工作日,我想显示一条警告信息。
有办法做到这一点吗?非常感谢。
答案 0 :(得分:2)
首先,您需要了解VBA如何“理解”约会。
Excel,Access,VBA和许多MS产品将日期存储为双精度数字;数字的整数部分是日期(自1900年1月1日起计算的天数),数字的小数部分是时间(一天的分数)。
这样可以轻松比较两个日期:您可以比较,添加或减去日期,就像使用数字一样。因此,如果t0
和t1
是两个日期(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