2017-02-24 40 views
1

列A,D和E是日期和時間。使用下面的代碼我收到錯誤變量未定義

我想知道A列中的日期在開始日期和結束日期之間有多少次。

列A可能在30到60天之間變化,而開始和結束日期運行到數千。

兩個問題:

  1. 我爲什麼會收到錯誤變量與下面的代碼沒有定義?
  2. 如果單元格A2是日期和時間24Feb17 12H00那麼我會在單元格A3中放入什麼公式以便它讀取25Feb17 12H00等等?

代碼:

Option Explicit 
Sub DaysCount() 
    Dim endRow As Long 
    Dim LastRow As Long 
    Dim ICount As Long 
    Dim Day() As Variant 
    Dim StartDate() As Variant 
    Dim EndDate() As Variant 
    ICount = 0 
    With ThisWorkbook.Worksheets("sheet1") 
     LastRow = .Range("A" & .Rows.count).End(xlUp).Row 
     endRow = .Range("D" & .Rows.count).End(xlUp).Row 
     Day = Sheet1.Range("A2:A" & LastRow) 
     StartDate = Sheet1.Range("D2:D" & endRow) 
     EndDate = Sheet1.Range("E2:E" & endRow) 

     For i = LBound(StartDate) To UBound(StartDate) 
      For J = LBound(Day) To UBound(Day) 
       If Day(J, 1) >= StartDate(i, 1) And Day(J, 1) <= EndDate(i, 1) Then 
        ICount = ICount + 1 
       Else 

       End If 
       Sheet1.Range("B" & J).Value = ICount 
      Next i 
      ICount = 0 
     Next J 
    End With 
End Sub 
+0

'選項Explicit'在代碼的頂部意味着你需要聲明代碼中使用例如所有變量'Dim i as integer'沒有被包含,也沒有變量'j' – MiguelH

+0

哪一行創建'ERROR'? – harun24hr

+0

因爲你有Option Explicit set,變量i和j沒有定義。但是代碼有更多的問題,例如在下一個j語句之前使用'next i'語句 – FunThomas

回答

2
  1. Option Explicit迫使你聲明的所有變量,所以你需要聲明ij了。
    而你的Next iNext j不是很好!

  2. VBA:DateAdd("d",.Range("A3"),1)

更正代碼:

Option Explicit 

Sub DaysCount() 
Dim i As Long 
Dim j As Long 
Dim endRow As Long 
Dim LastRow As Long 
Dim ICount As Long 
Dim Day() As Variant 
Dim StartDate() As Variant 
Dim EndDate() As Variant 
ICount = 0 
With ThisWorkbook.Worksheets("sheet1") 
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
    endRow = .Range("D" & .Rows.Count).End(xlUp).Row 
    Day = Sheet1.Range("A2:A" & LastRow) 
    StartDate = Sheet1.Range("D2:D" & endRow) 
    EndDate = Sheet1.Range("E2:E" & endRow) 

    For i = LBound(Day) To UBound(Day) 
     For j = LBound(StartDate) To UBound(StartDate) 
      If Day(j, 1) >= StartDate(i, 1) And Day(j, 1) <= EndDate(i, 1) Then 
       ICount = ICount + 1 
      Else 
      End If 
     Next j 
     .Range("B" & i).Value = ICount 
     ICount = 0 
    Next i 
End With 
End Sub 
+0

欣賞你花時間幫助菜鳥。十分感謝! – Anthony

+0

@Anthony:不客氣! ;) 很高興我能幫上忙! – R3uK