我想在SUMIF函数中使用过滤范围。我的WB中有一些命名范围(Sheet1中的“ uselist”是项目的一列,Sheet2中的“等分”是数量的一列,Sheet2中的“ dates”是日期为yyyy-mm-dd
的一列)。
我的代码中的此公式按预期工作(即,将“使用列表”列中具有item=cell.Value
的“等分试样”中的数量相加):
Cells(cell.Row, "K") = Application.SumIf(Range("uselist"), cell.Value, Range("aliquotes"))
但是现在我希望将总和限制为在“日期”列中具有在Sheet1的“ O”列中报告的日期与现在之间的日期之间的行。我正在工作的“单元格”在Sheet1中。这是我的代码:
Sub FilterSum()
On Error Resume Next
Dim MyRangeI As Range
Dim MyRangeO As Range
Dim cell As Range
Dim XNEWRANGE As Range
Dim wsI As Worksheet
Dim wsO As Worksheet
Set wsI = ThisWorkbook.Sheets("Sheet1")
Set wsO = ThisWorkbook.Sheets("Sheet2")
With wsI.UsedRange 'don't consider headers
Set MyRangeI = Range(.Cells(2, 1), .Cells(1, 1).Offset(.Rows.Count - 1, .Columns.Count - 1))
MyRangeI.Select
End With
With wsO.UsedRange 'don't consider headers
Set MyRangeO = Range(.Cells(2, 1), .Cells(1, 1).Offset(.Rows.Count - 1, .Columns.Count - 1))
MyRangeO.Select
End With
Application.ScreenUpdating = False
For Each cell In MyRangeI.Columns("A").Cells 'cell belongs to "uselist" Named Range
MyRangeO.AutoFilter Field:=9, Criteria1:=">=" & MyRangeI.Cells(cell.Row, "O"), Operator:=xlAnd, Criteria2:="<=" & Now 'Field 9 is the same of the Named Range "dates"
Set XNEWRANGE = MyRangeO.SpecialCells(xlCellTypeVisible)
MyRangeI.Cells(cell.Row, "K") = Application.SumIf(XNEWRANGE, MyRangeI.cell.Value, Range("aliquotes"))
MyRangeO.ShowAllData 'reset filter before start new cell
Next cell
Application.ScreenUpdating = True
End Sub
我认为要用于宏的两个不同的工作表存在问题。