用下面的代码,我收到错误variables未定义

列A,D和E是date和时间。

我试图找出A列中的date在开始date和结束date之间有多less次。

A列可能在30天到60天之间变化,而开始和结束date为数千。

两个问题:

  1. 为什么我收到错误variables未使用下面的代码定义?
  2. 如果单元格A2是date和时间24Feb17 12H00那么我在A3单元格中input什么公式,以便它读取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 

  1. Option Explicit强制你声明所有的variables,所以你也需要声明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