如何检查列表中是否缺少日期?

时间:2018-05-22 14:59:03

标签: excel excel-vba excel-formula vba

我有一张Excel工作表,其中包含日期列表

Thursday, May 30, 2013
Friday, May 31, 2013
Monday, June 3, 2013
Tuesday, June 4, 2013
Wednesday, June 5, 2013
Thursday, June 6, 2013
Friday, June 7, 2013
Tuesday, June 11, 2013
Wednesday, June 12, 2013
Thursday, June 13, 2013
Friday, June 14, 2013
Monday, June 17, 2013
Tuesday, June 18, 2013

我需要确定我是否错过了某个日期(仅限工作日)并插入了不同颜色的背景。

我试过这个

=IF(A2=A1+1,"","Missing next day")

但它告诉我星期六不见了(我对周末不感兴趣)。

在上面的示例数据中,星期一6月10日缺失

2 个答案:

答案 0 :(得分:3)

正如@SolarMike所说:

=IF(A2=A1+(WEEKDAY(A1)=6)*2+1,"","Missing next day")

enter image description here

答案 1 :(得分:2)

这是让你开始使用的东西,只要你愿意改变颜色:

Public Sub TestMe()

    Dim myCell As Range

    For Each myCell In Range("A1:A12")'One less, because it checks the cell on the next row
        Select Case Weekday(myCell)

        Case vbFriday
            If Weekday(myCell.Offset(1)) <> vbMonday Then
                myCell.Offset(0, 1) = "Missing!"
                myCell.Interior.Color = vbYellow
            End If
        Case vbSaturday, vbSunday
            myCell.Offset(0, 1) = "Not interested"
        Case Else
            If Weekday(myCell.Offset(1)) - 1 <> Weekday(myCell) Then
                myCell.Offset(0, 1) = "Missing!"
                myCell.Interior.Color = vbYellow
            End If
        End Select

    Next myCell

End Sub

enter image description here

代码使用WeekDay函数,该函数根据周返回数字。因此,如果日期是星期一,则在它被调用时返回2:Weekday("21.05.2018")。因此,可以使用预定义的枚举vbMonday,它返回2

在此基础上,我们会介绍Select CaseIf运算符,负责处理3个案例 - vbFridayvbSaturday, vbSunday以及其他4天。

如果Else不符合预期,则内部变为vbYellow