2017-03-19 37 views
0

我有一個For循環,直到有一個空白單元格。列A是自定義格式的數據。我正在嘗試運行每週(星期一至星期五)的報告。溢出和不匹配錯誤

42738收益2017年1月3日

42739收益2017年1月4日

42740收益2017年1月5日

我試圖找出如何設置範圍值來創建此週報告。

我測試是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 =一個不匹配錯誤?

有沒有更清晰的方式來寫這個?

在此先感謝!

+0

昏暗指明MyDate只要 – 0m3r

回答

0

假設列A中的日期值是他們的數字格式(就像您在文章中提到的那樣,42738,42739等),那麼下面的代碼將得到您想要的。

您不需要將日期值存儲在變量中的單元格中,可以使用DateDiff函數直接計算每個2個單元格之間的差異。要了解更多關於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 
+0

我能夠使用DateDiff函數!它幫助徹底謝謝你! –