Шаг 38.
VBA в MSExcel.
Методы объекта Range, использующие команды Excel. Метод Subtotal

    На этом шаге мы рассмотрим параметры этого метода и пример использования.

    Метод Subtotal добавляет промежуточные итоги в список данных, основываясь на изменениях в определенных полях данных. Промежуточные итоги позволяют обобщить данные. Метод Subtotal автоматически вставляет строки с промежуточными итогами, в которые введены формулы для подсчета итогов. Необходимо, чтобы до активизации этого метода данные были правильно отсортированы. В противном случае этот метод может привести к неверному выводу промежуточных итогов. Вручную метод Subtotal вызывается командой Данные | Итоги (Data | Subtotal).

    Синтаксис:

  Объект.Subtotal(GroupBy, Function, TotalList, Replace, _
        PageBreaks, SummaryBelowData)

    Аргументы:

Таблица 1. Аргументы метода Subtotal
Аргумент Назначение
Объект Диапазон, для которого подводятся промежуточные итоги
GroupBy Номер поля, по которому вычисляются промежуточные итоги
Function Определяет функцию, по которой производится подсчет промежуточных итогов. Допустимые значения:
  • xlAverage (среднее);
  • xlCount (количество значений);
  • xlCountNums (количество чисел);
  • xlMax (максимум);
  • xlMin (минимум);
  • xlProduct (произведение);
  • xlStDev (несмещенное отклонение);
  • xlStDevp (смещенное отклонение);
  • xlSum (сумма);
  • xlVar (несмещенная дисперсия);
  • xlVarP (смещенная дисперсия).
TotalList Массив целых чисел с номерами полей, по которым вычисляются промежуточные итоги
Replace Допустимые значения: True (существующие промежуточные итоги будут замещены) и False (в противном случае)
PageBreaks Допустимые значения: True (после каждой группы будет вставлено по символу разрыва страницы) и False (в противном случае)
SummaryBelowData Определяет местоположение для вывода промежуточных итогов. Допустимые значения:
  • xlSummaryAbove (промежуточные итоги будут выведены над данными) и
  • xlSummaryBelow (промежуточные итоги будут выведены под данными)

    Основным методом, связанным с Subtotal, является метод RemoveSubtotal, удаляющий промежуточные итоги с рабочего листа. Метод RemoveSubtotal применяется к объекту Range.

    Приведем соответствие между аргументами метода Subtotal и подведением промежуточных итогов на рабочем листе вручную при помощи команды Данные | Итоги (Data | Subtotal) на примере подсчета продаж компьютеров по месяцам и нахождения средних объемов продаж (рисунок 1).


Рис.1. Отчет о продажах компьютеров

  1. Выделим ячейки списка, в данном случае диапазон A1:C16. Выберем команду Данные | Итоги (Data | Subtotal). На экране отобразится диалоговое окно Промежуточные итоги (Subtotal) (рисунок 2).


    Рис.2. Диалоговое окно Промежуточные итоги

  2. В диалоговом окне Промежуточные итоги (Subtotal):
    • Раскрывающийся список При каждом изменении в (Ateach change) устанавливает, по какому столбцу группируются данные. В данном случае выберем Компьютер.
    • Раскрывающийся список Операция (Use function) устанавливает операцию, выполняемую над данными. Выберем Сумма (Sum).
    • Список Добавить итоги по (Add subtotal to) устанавливает данные, которые участвуют в расчетах. В данном случае выберем Количество.
    • Флажок Заменить текущие итоги (Replace current subtotals) определяет, надо ли заменить старые промежуточные итоги на вновь созданные. Сбросим этот флажок.
    • Флажок Конец страницы между группами (Page break between groups) определяет, надо ли вставлять символ конца страницы после каждой группы, для которой подводятся промежуточные итоги. Сбросим этот флажок.
    • Флажок Итоги под данными (Summary below data) определяет расположение промежуточных итогов под или над данными, по которым подводятся итоги. Расположим их под данными и поэтому установим флажок Итоги под данными (Summary below data).

  3. Нажмем кнопку ОК в диалоговом окне Промежуточные итоги (Subtotal), что приведет к созданию промежуточных итогов на рабочем листе по выделенному диапазону данных (рисунок 3).


    Рис.3. Результат выполнения команды Промежуточные итоги

        На VBA тот же результат достигается применением следующих инструкций:

      Range("Al:C16").Select 
      Selection. Subtotal GroupBy:=l, Function:=xlSum, _
        TotalList:=Array (3) , Replace:=False, PageBreaks:=False, _
        SuramaryBelowData:=True
    
  4. Добавим показатель средней реализации компьютеров по месяцам к уже найденным объемам их реализации. С этой целью выделим ячейки списка с данными и уже подведенными ранее итогами, в данном случае диапазон A1:С20. Выберем команду Данные | Итоги (Data | Subtotal). На экране отобразится диалоговое окно Промежуточные итоги (Subtotal). В этом диалоговом окне:
    • В раскрывающемся списке При каждом изменении в (At each change) выберем Компьютер.
    • В раскрывающемся списке Операция (Use function) выберем Среднее (Average).
    • В списке Добавить итоги по (Add subtotal) установим флажок Количество.
    • Сбросим флажок Заменить текущие итоги (Replace current subtotals).
    • Сбросим флажок Конец страницы между группами (Page break between groups).
    • Установим флажок Итоги под данными (Summary below data).
  5. Нажмем кнопку OK в диалоговом окне Промежуточные итоги (Subtotal), что приведет к добавлению показателя средней реализации компьютеров по месяцам к уже существующим промежуточным итогам на рабочем листе (рисунок 4).


    Рис.4. Результат добавления показателя средней реализации компьютеров по месяцам

        На VBA тот же результат достигается применением следующих инструкций:

      Range ("A1:C20").Select 
      Selection. Subtotal GroupBy:=l, Function:=xlAverage, _
        TotalList:=Array (3) , Replace:=False, PageBreaks:=False, _
        SummaryBelowData:=True
    
  6. Вместе с промежуточными итогами метод Subtotal создает структуру, которая позволяет управлять отображением детализации таблицы. Управляющими элементами структуры являются кнопки, отображаемые на левой стороне рабочего листа с номерами уровней иерархии, и кнопки, помеченные знаками "+" и "-". Нажатие на кнопку "+" или "-" позволяет отобразить или скрыть детализацию данного элемента структуры, а на кнопки с номером уровня — детализацию целого уровня. Отобразим, например, только промежуточные итоги без их детализации. Для этого надо нажать сначала кнопку 2, а затем 3 (рисунок 5).


    Рис.5. Вывод промежуточных итогов без детализации

        На VBA тот же результат достигается применением следующих инструкций:

      ActiveSheet.Outline.ShowLevels RowLevels:=2 
      ActiveSheet.Outline.ShowLevels RowLevels:=3
    

        Здесь свойство Outline рабочего листа возвращает объект Outline (Структура), а свойство ShowLevels объекта Outline устанавливает отображаемый уровень детализации.

  7. Для удаления промежуточных итогов следует выделить данные с этими итогами, выполнив команду Данные | Итоги (Data | Subtotal) и нажать кнопку Убрать все (Remove All) в появившемся диалоговом окне Промежуточные итоги (Subtotal). На VBA тот же результат достигается применением следующих инструкций:
      Range ("A1:C24").Select 
      Selection.RemoveSubtotal
    

    Со следующего шага мы начнем рассматривать сценарии.




Предыдущий шаг Содержание Следующий шаг