Я хочу использовать отфильтрованный диапазон в функции SUMIF.У меня есть некоторый Именованный диапазон в моем ББ («список использования» в Sheet1 - это столбец элемента, а «аликвоты» в Sheet2 - это столбец количества, «даты» в Sheet2 - это столбец даты yyyy-mm-dd
).
Эта формула в моем коде работает должным образом (т.е. суммирует количества в "аликвотах", которые имеют item=cell.Value
в столбце "списка использования"):
Cells(cell.Row, "K") = Application.SumIf(Range("uselist"), cell.Value, Range("aliquotes"))
Но теперь я хочу ограничитьсумма к тем строкам, которые имеют в столбце «даты» дату между датой, указанной в столбце «O» в Sheet1 и Now.Ячейка, в которой я работаю, находится в 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
MyRangeO.AutoFilter Field:=9, Criteria1:=">=" & MyRangeI.Cells(cell.Row, "O"), Operator:=xlAnd, Criteria2:="<=" & Now 'Field 9 is tha same of the Named Range "dates"
Set XNEWRANGE = MyRangeO.SpecialCells(xlCellTypeVisible)
MyRangeI.Cells(cell.Row, "K") = Application.SumIf(XNEWRANGE, MyRangeI.cell.Value, Range("aliquotes"))
Next cell
Application.ScreenUpdating = True
End Sub
По моему мнению, есть проблема с двумя различными листами, которые я хочу использовать для макроса.