Я хочу использовать отфильтрованный диапазон в функции SUMIF. У меня есть некоторый Именованный диапазон в моем ББ («список использования» в Sheet1 - это столбец элемента, а «аликвоты» в Sheet2 - это столбец количества, «даты» в Sheet2 - это столбец даты yyyy-mm-dd
).
Эта формула в моем коде работает как ожидалось (т.е. суммируйте количества в "аликвотах", которые имеют item=cell.Value
в столбце "списка использования"):
Cells(cell.Row, "K") = Application.SumIf(Range("uselist"), cell.Value, Range("aliquotes"))
Но теперь я хочу ограничить сумму теми строками, в столбце «даты» которых есть дата между датой, указанной в столбце «О» на Листе 1, и «Сейчас». «Ячейка», в которой я работаю, находится в 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
По моему мнению, есть проблема с двумя разными листами, которые я хочу использовать для макроса.