我在工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个 VBA 来比较这两列并验证未来日期是否比今天提前三个工作日。如果日期不是比今天提前三个工作日,我想显示一条警告消息。
有没有办法做到这一点?非常感谢。
首先,您需要了解 VBA 如何“理解”日期。
Excel、Access、VBA 和许多 MS 产品将日期存储为双精度数字;数字的整数部分是日期(自 1900 年 1 月 1 日起计算的天数),数字的小数部分是时间(天的小数部分)。
这使得比较两个日期变得容易:您可以像使用数字一样比较、添加或减去日期。因此,如果t0
和t1
是两个日期 ( t1 >= t0
),则表达式t1 - t0
将为您提供天差。
现在...如何计算两个日期之间的“工作日”?format()
VBA 中的函数可以帮助您。您可以使用此函数返回“星期几”数字。查看该功能的在线帮助: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
希望这可以帮助你
此外,不需要使用 VBA。Excel 将允许您将日期视为数学对象,并且日期周围还有多个公式函数。
查看 NETWORKDAYS() 函数。
http://office.microsoft.com/en-us/excel-help/networkdays-HP005209190.aspx
尝试这个:
假设 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