我正在尝试计算工作表中符合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之间的任何日期
答案 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列为空,也会被计数...