溢出和不匹配错误

时间:2017-03-19 07:00:42

标签: vba date row cell

我有一个For循环,直到有一个空白单元格。 A列是自定义格式的数据。我试图每周(周一至周五)报道。

42738返回1/3/2017

42739返回1/4/2017

42740返回1/5/2017

等等

我正在尝试弄清楚如何设置范围值来创建此每周报告。

我正在测试的理论是A3 - A2 = 1,这是星期一等等,

如果A3 - A2 = 2则表示周末。

这是我到目前为止的代码

Dim wks As Worksheet
Dim LastDate As Long
Dim myDate As Integer

Set wks = Worksheets("Labor")
LastDate = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row

For dRow = 2 To LastDate

    xDate = CInt(Cells(dRow, "A").Value)
    yDate = CInt(Cells(dRow - 1, "A").Value)

    If xDate - yDate = 2 Then
        'weekend
        MsgBox ("Weekend!")

    ElseIf xDate - yDate = 1 Then
        'next day        
    ElseIf xDate - yDate = 0 Then
        'same day       
    Else
        MsgBox (xDate - yDate)

    End If


    myDate = 1

Next dRow

我的问题是:

如何修复xDate =?

的溢出错误

为什么yDate =不匹配错误?

有没有更简洁的方法来写这个?

提前致谢!

1 个答案:

答案 0 :(得分:0)

假设A列中的日期值采用数字格式(就像您在帖子中提到的那样,42738,42739等),那么下面的代码将为您提供所需的内容。

您不需要将日期值存储在变量的单元格中,您可以使用DateDiff函数直接计算每个单元格之间的差异。要详细了解DateDiff阅读HERE

之后,您可以对要检查的每种类型的方案使用Select Case

<强>代码

Option Explicit

Sub NumofWeekdays()

Dim wks             As Worksheet
Dim LastDate        As Long
Dim NumofDays       As Long
Dim dRow            As Long

Set wks = Worksheets("Labor")    
With wks
    LastDate = .Cells(.Rows.Count, "A").End(xlUp).Row

    For dRow = 2 To LastDate
        NumofDays = DateDiff("d", .Range("A" & dRow - 1).Value, .Range("A" & dRow).Value)                          
        Select Case NumofDays
            Case Is >= 2
                'weekend
                MsgBox "Weekend!"

            Case 1
                'next day
                MsgBox "Next Day"

            Case 0
                'same day
                MsgBox "Same Day"

            Case Else
                MsgBox NumofDays

        End Select
    Next dRow
End With

End Sub