Страницы: 1
RSS
Как оптимизировать макрос для фильтрации строчек по датам?
 
Доброго времени суток!
В приложенном файле (Excel 2003) макросом производится отбор строк с датами месяца, выбранного в ячейке B1. Так же производится суммирование значений по выбранному месяцу (ячейка С1). Но для корректной работы макроса я вынужден был создать вспомогательную колонку F. Просьба помочь изменить макрос, чтобы он работал без этой колонки.
 
KSR, обычно это сводной делается. А если макросом, то с помощью фильтра.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address <> "$B$1" Then Exit Sub
  If Range("B1") = "все" Then
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
  Else
    Range("IV2").Formula = "=TEXT(B3,""МММ"")=$B$1"
    Range("B2:B65536").AdvancedFilter Action:=xlFilterInPlace, _
      CriteriaRange:=Range("IV1:IV2"), Unique:=False
    Range("IV2").ClearContents
  End If
End Sub
Изменено: Казанский - 05.01.2018 14:24:11
 
Казанский, Огромное Спасибо!
Пока не понял кода, но все работает замечательно. Буду разбираться.
 
Казанский, если не трудно, просьба объяснить, почему в строчке 7 кода начало выделяемого диапазона начинается на строчку выше, чем диапазон данных.
Код
7|  Range("B2:B65536").AdvancedFilter
Просто я ищу свои возможные ошибки при введении этого макроса в рабочую таблицу - она у меня большая (в примере, разумеется, приведен минимальный вариант) и обработка фильтром производится не совсем корректно. Если выбираю месяц после "все", то фильтруется быстро, а если после уже выбранного месяца выбираю другой - тормозит. Причем, если выбираю во втором случае "янв", то Excel вообще зависает.

P.S. К сожалению, автофильтр не подошел к моим задачам. Обнаружились еще недостатки. Вернулся к вспомогательному столбцу. Все равно большое спасибо за помощь!  Вопрос выше не удалил, т.к. интересен на будущее.
Изменено: KSR - 07.01.2018 07:24:05
 
Цитата
почему в строчке 7 кода начало выделяемого диапазона начинается на строчку выше, чем диапазон данных.
Записан диапазон данных вместе с заголовком Range("B2:B65536") . В качестве условий для расширенного фильтра используется
формула в IV2, которая ссылается на вторую ячейку В3, при этом эта формула распространяется на все ячейки диапазона данных.
Обратите внимание на диапазон критерия отбора, CriteriaRange:=Range("IV1:IV2"). В фильтре отбираются только строки, для которых
значение формулы диапазоне данных = True.
Диапазон данных Range("B2:B65536")  можно ограничить, найдя последнюю заполненную ячейку в столбце В, Range("B2:B" & iLastRow)
 
Kuzmich, большое спасибо!
Страницы: 1
Наверх