После использования расширенного фильтра не работает функция subtotal - VBA

Узнай цену своей работы

Формулировка задачи:

Добрый день! Никак не могу разобраться с суммированием динамического диапазона строк в столбце после применения фильтра. Есть таблица на Листе1, куда через форму вводятся данные. Затем таблица копируется на Лист2, где я задала расширенный фильтр, он работает нормально. Данные в таблице могут изменяться (строки добавляться, удаляться). В 9 столбце (I) нужно произвести суммирование видимых строк, думаю использовать функцию subtotal. Но никаким образом она не хочет работать. Пыталась сделать перебором с циклом заполненных строк и выводом результата функции в последующую после последней ячейки. Не работает. Помогите пожалуйста! Файл программы достаточно большой, выкладывать думаю, не стоит. Вот код:
Листинг программы
  1. Private Sub Worksheet_Activate()
  2. Sheets(1).UsedRange.Copy Sheets(2).Cells(7, 1) 'копирование таблицы с листа1 при активации листа2.
  3. 'С 7 строки для расширенного фильтра
  4. Sheets(2).Range("I7").End(xlDown).Clear
  5. On Error Resume Next
  6. End Sub
  7. Private Sub Worksheet_Change(ByVal Target As Range)
  8. If Not Intersect(Target, Range("A2:I5")) Is Nothing Then 'диапазон дополнит таблицы (таблицы условий)
  9. On Error Resume Next
  10. ActiveSheet.ShowAllData 'очистка данных от предущей фильтрации
  11. Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
  12. 'Range("A7")- первая ячейка диапазона исходных данных.Range("A1")- начало диапазона условий
  13. End If
  14. If AdvancedFilter = True Then
  15. Dim ra As Range
  16. Dim iRow As Long 'Хранит номер текущей строки
  17. Const y = 7 - количество строк шапки
  18. Dim dCellValues() As Range 'Массив для хранения значений ячеек
  19. iRow = y + 1
  20. ReDim dCellValues(1 To 10)
  21. 'Цикл Do Until перебирает последовательно ячейки столбца I активного листа
  22. 'и извлекает их значения в массив до тех пор, пока не встретится пустая ячейка
  23. Do Until IsEmpty(Cells(iRow, 9))
  24. 'Проверяем, что массив dCellValues имеет достаточный размер
  25. 'Если нет – увеличиваем размер массива на 10 при помощи ReDim
  26. If UBound(dCellValues) < iRow Then
  27. ReDim Preserve dCellValues(1 To iRow + 9)
  28. End If
  29. 'Сохраняем значение текущей ячейки в массиве dCellValues
  30. dCellValues(iRow) = Cells(iRow, 9).Value
  31. iRow = iRow + 1
  32. Loop
  33. Set ra = ActiveSheet.Range("I7").End(xlDown).Offset(1, 0) 'выбор пустой ячейки, которая ниже непрерывного столбца
  34. ra.Select
  35. ra.Value = Application.WorksheetFunction.Subtotal (109, dCellValues(iRow))
  36. End If
  37. End Sub

Решение задачи: «После использования расширенного фильтра не работает функция subtotal»

textual
Листинг программы
  1. Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  2.     If Not Intersect(Target, [A2:I5]) Is Nothing Then
  3.        'If FilterMode = True Then ShowAllData
  4.       Application.EnableEvents = False
  5.        [I:I].Replace "=SUBTOTAL(*", ""
  6.        With [A7].CurrentRegion
  7.             .AdvancedFilter xlFilterInPlace, [A1].CurrentRegion
  8.             .Cells(.Rows.Count + 1, 9) = "=SUBTOTAL(9, " & .Columns(9).Address & ")"
  9.        End With
  10.        Application.EnableEvents = True
  11.     End If
  12. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут