计算日期范围内的所有行

时间:2020-06-24 23:51:54

标签: excel vba

我正在尝试计算工作表中符合3组条件的行数:C列中的客户端名称与我的活动行匹配; G列中的到期日;并且M列为空白(表示未发送以前的提交)。

通过以下代码,我可以使其正常工作:

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Broker Workflow")

Dim i As Long
Dim iVal As Long

Dim lastRow As Long: lastRow = ws.Range("C" & Rows.Count).End(xlUp).Row
Dim strClient As String: strClient = Cells(ActiveCell.Row, "C").Value
Dim strRenDate As String: strRenDate = Cells(ActiveCell.Row, "G").Value
Dim strNotSubmitted As String: strNotSubmitted = ""

Dim strCriteria As String: strCriteria = strClient & strRenDate & strNotSubmitted

iVal = 0
    
    For i = 8 To lastRow
        If ws.Range("C" & i).Value & ws.Range("G" & i).Value & ws.Range("M" & i).Value = strCriteria Then
            iVal = iVal + 1
        End If
   Next i
   
Dim strCount As String: strCount = iVal

我的问题是,现在我想扩展其范围,以计算到期日期在我的活动行日期+/- 7天(14天范围)内的所有行。因此,如果我的到期日是07/06/2020,它将计算与C中的我的客户名称匹配的行数,在M中包含空白单元格,在G中包含01/06 / 2020-14 / 06/2020之间的任何日期

1 个答案:

答案 0 :(得分:1)

您使它变得比所需的更加复杂...可以摆脱上面的四个变量,只需进行如下测试:

For i = 8 To lastRow
    If ws.Range("C" & i).Value = Cells(ActiveCell.Row, "C").Value & _
        ws.Range("M" & i).Value = "" & _
        ws.Range("G" & i).Value >= DateAdd(Cells(-7, "d", ActiveCell.Row, "G").Value) & _
        ws.Range("G" & i).Value <= DateAdd(Cells(7, "d", ActiveCell.Row, "G").Value) Then
         iVal = iVal + 1
    End If
Next i

[编辑] 抱歉! 我不知道我以前写的是什么。

我混合使用DateAdd中的参数,并使用&代替and

此方法经过测试:

For i = 8 To lastRow
        If Cells(i, "C").Value = Cells(ActiveCell.Row, "C").Value And _
            Cells(i, "M").Value = "" And _
            Cells(i, "G").Value >= DateAdd("d", -7, Cells(ActiveCell.Row, "G").Value) And _
            Cells(i, "G").Value <= DateAdd("d", 7, Cells(ActiveCell.Row, "G").Value) Then
             iVal = iVal + 1
        End If
Next i

它也可以与您的ws.Range语法一起使用,对我来说,使用Cells像这样测试它更简单 请注意,如果当前行的M列为空,也会被计数...

相关问题