Как принудительно суммировать значения для всех полей сводной

Что делает макрос: При создании сводной таблицы Excel, по умолчанию, суммирует данные для подсчета или суммирования элементов. Если все ячейки в столбце содержат числовые данные, Excel выбирает сумму. Если поле, которые вы добавляете содержат пробел или текст, Excel выбирает Количество.
Хотя во многих случаях поля, которые должны быть суммированы на законных основаниях, содержат пробелы. В этих случаях мы вынуждены вручную изменять тип вычислений.
Макрос в этом разделе направлен на оказание помощи путем автоматической установки типа расчета каждого элемента данных на Sum.

Как макрос работает

Этот макрос выполняет цикл по каждому полю данных в сводной таблице и изменяет свойство функции к xlSum. Вы можете изменить этот макрос, чтобы использовать один из вариантов расчета: xlCount, xlAverage, xlMin, xlMax и так далее. Когда вы идете в окно кода и вводите pf.Function =, вы видите выпадающий список вариантов.

Код макроса

Sub SummirovatZnacheniyaPoleiSvodnoi()
'Шаг 1: Объявляем переменные
Dim pt As PivotTable
Dim pf As PivotField
'Шаг 2: Наведите курсор на сводную таблицу в активной ячейке
On Error Resume Next
Set pt = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)
'Шаг 3: Выход, если ячейка находится не в сводной таблице
If pt Is Nothing Then
MsgBox "Вы должны поместить курсор в сводную таблицу."
Exit Sub
End If
'Шаг 4: Цикл по полям сводной с применением суммы
For Each pf In pt.DataFields
pf.Function = xlSum
Next pf
End Sub

Как этот код работает

  1. Шаг 1 объявляет две переменные объекта. Он использует РТ, как контейнер памяти для сводной таблицы и PF в качестве контейнера память для полей данных. Это позволяет перебрать
    все поля данных в сводной таблице.
  2. Этот макрос устроен так, что мы предполагаем, активную сводную таблицу на основе активной ячейки. Активная ячейка должна быть внутри сводной таблицы для этого макроса. Предполагается, что, когда курсор находится внутри определенной сводной таблицы, мы хотим выполнить макрос действий на этом уровне. Шаг 2 устанавливает переменную pt в имя сводной таблицы, в которой находится активная ячейка. Мы делаем это, используя свойство ActiveCell.PivotTable.Name, чтобы получить имя целевой сводной. Если активная ячейка не находится внутри сводной таблицы, выдается ошибка. Вот почему мы используем On Error Resume Next. Это говорит Excel продолжить макрос, если есть ошибка.
  3. Шаг 3 проверяет, заполнена ли переменная pt объектом PivotTable. Если переменная pt в значении Nothing, активная ячейка не была включена в сводную таблицу, поэтому сводной таблице не может быть присвоена переменная. Если это так, мы сообщаем пользователю в окне сообщения, а затем выходим.
  4. Если макрос достиг шага 4, он успешно указал на сводную таблицу. Он использует оператор For Each, чтобы перебрать каждое поле данных. Каждый раз, когда новое поле сводной выбрано, он изменяет свойство Function, чтобы установить вычисление, используемое полем. В этом случае, мы устанавливаем все поля данных в сводной таблице на сумму. После того, как имя было изменено, мы переходим к следующему полю данных. После того, как все поля данных
  5. были оценены, макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.
Оцените статью
Добавить комментарий