Макрос для обновления сводных таблиц в excel

Skip to content

На чтение 2 мин. Просмотров 8.6k.

Что делает макрос: Это не редкость, когда имеется несколько сводных таблиц в одной книге. Чаще всего эти сводные таблицы ссылаются на данные, которые требует их обновления. Этот макрос поможет обновить все сводные таблицы по первому требованию.

Содержание

  1. Что делает макрос
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Что делает макрос

Этот макрос — перебирает рабочие листы, а затем перебирает сводные таблицы. На каждом цикле, макрос обновляет сводную таблицу.

Код макроса

Sub ObnovitSvodnieTablici()
'Шаг 1: Объявляем переменные
Dim ws As Worksheet
Dim pt As PivotTable
'Шаг 2: Запускаем цикл через каждый лист книги
For Each ws In ThisWorkbook.Worksheets
'Шаг 3: Запускаем цикл через все сводные таблицы
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
End Sub

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

  1. Шаг 1 первый объявляет объект под названием WS. Это создает контейнер памяти для каждого рабочего листа. Он также объявляет объект под названием PT, который держит
    каждую сводную таблицу.
  2. Шаг 2 просматривает все рабочие листы в этой книге. Обратите внимание, что мы используем ThisWorkbook вместо ActiveWorkbook.
  3. Шаг 3 цикл проходит через все сводные таблицы в каждом листе, а затем запускает RefreshTable метод. После макрос переходит к следующему листу. После того, как все листы были
    оценены, макрос заканчивается. ActiveWorkbook относится к книге, которая в данный момент активна.

В качестве альтернативного метода для обновления всех сводных таблиц в книге, вы можете использовать ThisWorkbook.RefreshAll. Это обновляет все сводные таблицы в рабочей книге. Тем не менее, он также обновляет все таблицы запросов. Так что, если у вас есть таблицы данных, которые подключены к внешнему источнику или в Интернете, на них будет влиять метод RefreshAll. Если это не является проблемой, вы можете просто ввести ThisWorkbook.RefreshAll в стандартный модуль.

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

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

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

Even we can refresh particular connection and in turn it will refresh all the pivots linked to it.

For this code I have created slicer from table present in Excel:

Sub UpdateConnection()
        Dim ServerName As String
        Dim ServerNameRaw As String
        Dim CubeName As String
        Dim CubeNameRaw As String
        Dim ConnectionString As String

        ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1)
        ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "")

        CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1)
        CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "")

        If CubeName = "All" Or ServerName = "All" Then
            MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info"
        Else
            ConnectionString = GetConnectionString(ServerName, CubeName)
            UpdateAllQueryTableConnections ConnectionString, CubeName
        End If
    End Sub

    Function GetConnectionString(ServerName As String, CubeName As String)
        Dim result As String
        result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
        '"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False"
        GetConnectionString = result
    End Function

    Function GetConnectionString(ServerName As String, CubeName As String)
    Dim result As String
    result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
    GetConnectionString = result
End Function

Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String)
    Dim cn As WorkbookConnection
    Dim oledbCn As OLEDBConnection
    Dim Count As Integer, i As Integer
    Dim DBName As String
    DBName = "Initial Catalog=" + CubeName

    Count = 0
    For Each cn In ThisWorkbook.Connections
        If cn.Name = "ThisWorkbookDataModel" Then
            Exit For
        End If

        oTmp = Split(cn.OLEDBConnection.Connection, ";")
        For i = 0 To UBound(oTmp) - 1
            If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then
                Set oledbCn = cn.OLEDBConnection
                oledbCn.SavePassword = True
                oledbCn.Connection = ConnectionString
                oledbCn.Refresh
                Count = Count + 1
            End If
        Next
    Next

    If Count = 0 Then
         MsgBox "Nothing to update", vbOKOnly, "Update Connection"
    ElseIf Count > 0 Then
        MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection"
    End If
End Sub

Макрос для настройки полей и форматирования сводной таблицы

В данном примере представлены исходные коды и описания для макросов, которые позволяют настраивать и форматировать любые сводные таблицы.

Макрос для обновления сводной таблицы в Excel

Для примера воспользуемся тестовой сводной таблицей из предыдущего примера: Макрос для создания сводной таблицы в Excel.

Исходная сводная таблица.

Данной сводной таблице уже присвоено внутреннее имя «ТаблицаМ» (как описано в предыдущем примере, перейдите по ссылке выше картинки). Каждая сводная таблица состоит из 4-ох видов полей:

Карта полей.

  1. Поля ФИЛЬТРЫ.
  2. Поля СТРОКИ.
  3. Поля КОЛОННЫ.
  4. Поля ЗНАЧЕНИЯ.

Поля фильтров содержат ту часть таблицы исходных данных, которые необходимо проанализировать уже в сводной таблице. В примере следует проанализировать объем оборотов по отдельным магазинам фирмы. Как поле колон, так и поле строк определяет соответственно ту часть исходных данных, которую необходимо сортировать по строкам или по столбцам. Нет здесь определенного правила – все зависит от желаемого результата, который необходимо получить.

В данном примере определено:

  1. Столбец в исходных данных «Год» – находиться в поле фильтров.
  2. «Месяц» – определен как поле строк.
  3. «Магазины» – подчиненный к полю колон.
  4. «Оборот» – это поле значений, соответственно.

Далее рассмотрим, как изменять значения полей сводной таблицы с помощью макроса.

С помощью блока опций для второго конструктора With собираем расположение полей в сводной таблице. Текущие настройки полей при создании сводной таблицы определяются следующими строками кода макроса:

With ActiveSheet.PivotTables(«ТаблицаМ»)
.SmallGrid = True
.PivotFields(«Оборот»).Orientation = xlDataField
.PivotFields(«Год»).Orientation = xlPageField
.PivotFields(«Месяц»).Orientation = xlRowField
.PivotFields(«Магазины»).Orientation = xlColumnField
End With

Как видно из структуры данной части кода, каждое с полей сводной таблицы определяется отдельной строкой макроса. Ведь эта часть кода находиться внутри конструктора, который начинается с инструкции With. Если бы мы не использовали конструктор, тогда эти свойства и методы необходимо было бы каждый раз добавлять к объекту:

ActiveSheer.PivotTables(„ТаблицаМ”)

Примечание. «ТаблицаМ» – это внутреннее имя таблицы, которое было ей присвоено при создании для того, чтобы на нее было легче ссылаться в том числе и в коде макроса.

И к такому объекту должно относиться каждое поле настраивая порядок полей для сводной таблицы.

Заголовки столбцов, которые необходимо упорядочить определенным полем указываем (в скобках) как аргумент в методе PivotFields перед его свойством Orientation. В конце строки указываем параметром, какое поле было определено. Для этого к распоряжению язык VBA предоставляет нам выше упоминаемые 4 типа полей:

Поля Код VBA
ФИЛЬТРЫ xlPageField
СТРОКИ xlRowField
КОЛОННЫ xlColumnField
ЗНАЧЕНИЯ xlDataField

С помощью этих 4 строк VBA-кода макроса можно полностью изменить и по-другому настроить сводную таблицу. Разные настройки полей можно генерировать простейшими макросами, благодаря чему можно моментально перенастроить структуру любой сводной таблицы. Так даже намного удобнее, чем вручную перетягивать мышкой поля на уровне пользовательского интерфейса для настройки сводной таблицы в Excel.

Создадим макрос для изменения и настройки полей сводной таблицы. Откройте редактор макросов (ALT+F11) и создайте модуль если он еще не создан: «Insert»-«Module».

Введете код макроса, в результате которого будет выполнена автоматическая перенастройка структуры сводной таблицы с помощью изменения расположения полей для заголовков исходной таблицы «Магазины» и «Год»:

Sub ChangeTableM()
With ActiveSheet.PivotTables("ТаблицаМ")
.PivotFields("Магазины").Orientation = xlPageField
.PivotFields("Год").Orientation = xlColumnField
End With
End Sub

Код макроса.

Чтобы запустить макрос нажмите комбинацию горячих клавиш (ALT+F8) или выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ChangeTableM» и нажмите на кнопку «Выполнить».

Новые настройки полей.

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

Обратите внимание! В первой версии структуры сводной таблицы поле страницы служило для выбора года, относительного к соответственным показателям оборота магазинов фирмы. А теперь поле страниц служит для выбора соответственного магазина фирмы. В то же время года находятся в заголовках столбцов (поле КОЛОННЫ).



Форматирование сводной таблицы макросом

Созданная по умолчанию сводная таблица в большинстве случаев не соответствует желаемому уровню читабельности для пользователей. Как минимум нужно ей задать все необходимые форматы для отображения числовых значений. Следующий код макроса позволяет автоматически присвоить желаемый стиль для отображения чисел в денежном формате:

Sub FormatDeneg()
ActiveSheet.PivotTables("ТаблицаМ").PivotFields("Сумма по полю Оборот").NumberFormat = "# ##0 " & ChrW(8381)
End Sub

Снова нажмите комбинацию горячих клавиш (ALT+F8) или выберите: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«FormatDeneg» и нажмите «Выполнить».

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

В результате действия этого короткого и простого макроса все числовые значения в таблице будут преобразованы в денежный формат рублей (с разделителем тысяч и без копеек). Запустив макрос «FormatDeneg» сводная, таблица приобретет следующий вид:

Форматирование значений.

В коде макроса мы использовали свойство NumberFormat, которое играет главную роль в форматировании чисел. В параметрах свойства мы просто указываем тип формат для отображения значения. Разновидность типов можно взять из списка: «ГЛАВНАЯ»-«Ячейки»-«Формат»-«Формат ячеек» (CTRL+1).

Числовые форматы.

В появившемся окне на закладке «Число» выберите опцию «(все форматы)» из списка «Числовые форматы:». В правом поле «Тип:» можно подобрать свой желаемый параметр для свойства NumberFormat.

Обратите внимание! В конце строки параметра мы с помощью символа амперсанта добавляем непечатный символ, который возвращает функция ChrW(8381). Данная функция позволяет там вводить непечатные символы Unicode. А код 8381 в ее аргументе – это юникод непечатного символа рубля ₽

Подобными способами можно форматировать всю сводную таблицу используя другие сроки кода макроса. Просто нужно менять параметры для свойств (присваивать толщину и типы линий границ, изменять цвета фонов ячеек и т.п.).

Even we can refresh particular connection and in turn it will refresh all the pivots linked to it.

For this code I have created slicer from table present in Excel:

Sub UpdateConnection()
        Dim ServerName As String
        Dim ServerNameRaw As String
        Dim CubeName As String
        Dim CubeNameRaw As String
        Dim ConnectionString As String

        ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1)
        ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "")

        CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1)
        CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "")

        If CubeName = "All" Or ServerName = "All" Then
            MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info"
        Else
            ConnectionString = GetConnectionString(ServerName, CubeName)
            UpdateAllQueryTableConnections ConnectionString, CubeName
        End If
    End Sub

    Function GetConnectionString(ServerName As String, CubeName As String)
        Dim result As String
        result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
        '"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False"
        GetConnectionString = result
    End Function

    Function GetConnectionString(ServerName As String, CubeName As String)
    Dim result As String
    result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
    GetConnectionString = result
End Function

Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String)
    Dim cn As WorkbookConnection
    Dim oledbCn As OLEDBConnection
    Dim Count As Integer, i As Integer
    Dim DBName As String
    DBName = "Initial Catalog=" + CubeName

    Count = 0
    For Each cn In ThisWorkbook.Connections
        If cn.Name = "ThisWorkbookDataModel" Then
            Exit For
        End If

        oTmp = Split(cn.OLEDBConnection.Connection, ";")
        For i = 0 To UBound(oTmp) - 1
            If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then
                Set oledbCn = cn.OLEDBConnection
                oledbCn.SavePassword = True
                oledbCn.Connection = ConnectionString
                oledbCn.Refresh
                Count = Count + 1
            End If
        Next
    Next

    If Count = 0 Then
         MsgBox "Nothing to update", vbOKOnly, "Update Connection"
    ElseIf Count > 0 Then
        MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection"
    End If
End Sub

Хитрости »

21 Август 2016              62107 просмотров


Автообновляемая сводная таблица

Многие, кто работал со сводными таблицами наверняка знают, что при изменении значений в исходных данных(данные, на основании которых создана сводная) сама сводная таблица при этом не обновляется. Чтобы обновить надо проделать еще пару манипуляций:

    Выделить любую ячейку сводной таблицы→Правая кнопка мыши→Обновить(Refresh) или вкладка Данные(Data) →Обновить все(Refresh all) →Обновить(Refresh)

Однако, если в конец исходных данных добавить строку(или несколько), то с большой долей вероятности даже обновление сводной таблицы не поможет — добавленная строка не появится в сводной. И чтобы её увидеть необходимо будет изменить источник данных для сводной таблицы, включив новую строку в диапазон. Не очень удобно, не правда ли? Чтобы добиться расширения диапазона исходных данных автоматически вместе с добавлением туда данных, лучше позаботиться об этом до создания сводной таблицы.


Недоавтообновление
Почему «недо» — жать кнопку Обновить все же придется…Но не отчаивайтесь — читайте до конца и мы научимся обновлять все автоматом.

Для счастливых обладателей Excel 2007 и старше есть простой способ без лишних телодвижений. Это встроенный инструмент Таблица(Table). Его еще иначе называют «умная таблица» и я тоже буду применять этот термин, чтобы не было путаницы.

Умная таблица

— это специальный объект, который представляет собой правильную таблицу с заголовками, которая расширяется по мере добавления в неё данных. В ней много еще чего полезного, но нас интересует сейчас именно то, что она расширяется сама по мере добавления данных и что на её основе можно создать сводную таблицу. В нашем случае она будет играть роль динамического именованного диапазона(стандартный именованный диапазон не может быть источником данных для сводной таблицы, поэтому и приходится идти другими путями). Чтобы создать такую таблицу необходимо:

К выбранному диапазону автоматически будет применено форматирование как таблицы, используемое по умолчанию. На это можно не обращать внимания, т.к. для наших целей это по большому счету не важно.

    Если вдруг захочется и здесь навести красоту, то это тоже делается довольно легко:
    Выделяем любую ячейку в этой таблице-переходим на вкладку Работа с таблицами(Table tools)Конструктор(Desigh)Стили таблиц(Table styles). Можно выбрать один из предлагаемых там вариантов и применить. Если ни один из вариантов не подходит — создаем свой. Раскрываем список стилей и выбираем Создать стиль таблицы(New table style…)

А дальше все как привыкли:

  1. Выделить любую ячейку исходной таблицы(теперь уже «умной»)
  2. Вкладка Вставка(Insert) -группа Таблица(Table) -Сводная таблица(PivotTable)
  3. В диалоговом окне Создание сводной таблицы(Create PivotTable) в пункте Выбрать таблицу или диапазон(Select a table or range) в поле Таблица или диапазон(Range/Table) будет автоматически указан не адрес какого-то диапазона, а имя созданной умной таблицы:
    Создание сводной на основе умной таблицы
    Далее надо определить место размещения Сводной таблицы:

    • На новый лист (New Worksheet)
    • На существующий лист (Existing Worksheet)
  4. нажать OK

Готово. Теперь при добавлении строк в эту таблицу для их отображения в сводной достаточно будет лишь обновить сводную таблицу как привыкли. Правда, тут тоже есть нюанс — добавлять строки надо правильно. Можно вбить данные в любую ячейку первой пустой строки таблицы — таблица автоматом расшириться, добавив еще одну строку. Теперь туда можно скопировать нужные данные или добить вручную. Если надо вставить сразу несколько строк — в правом нижнем углу последней строки умной таблицы есть слегка выделяющийся уголочек, который надо ухватить мышью и растянуть на нужное кол-во строк/столбцов.
Если мы просто скопируем строки ниже таблицы, то она не расширится. Это надо учитывать.


Если необходимо

настроить на авторасширение уже созданную сводную

, то порядок почти такой же, только сводную таблицу создавать не надо. Преобразуем исходные данные в умную таблицу, переходим на лист со сводной таблицей. Выделяем любую ячейку в сводной таблице, переходим на динамическую вкладку Работа со сводными таблицами(PivotTable Tools)Параметры(Options) -группа кнопок Даныне(Data)Источник данных(Change data Source). В появившемся окне в поле Таблица или диапазон(Table/Range) указываем либо ссылку на всю умную таблицу, либо имя нашей умной таблицы(если знаете где его подсмотреть).

На что здесь следует обратить внимание:

если указывался диапазон, то если он указан верно — в поле вместо адреса ячеек будет отображено имя умной таблицы:
Изменить источник данных
Если же после указания видите именно диапазон — значит что-то указано неверно или таблица не является умной(возможно, форматирование от умной таблицы, но сама умная таблица была удалена).


Полное автообновление

Для полного счастья можно подключить работу макросов. Что я хочу? Я хочу, чтобы как только я изменил/добавил данные в исходные данные — сводная тут же обновилась. Для этого надо сделать следующее:

  1. убеждаемся, что макросы разрешены(Почему не работает макрос?, Что такое макрос и где его искать?)
  2. перейти на лист исходных данных(в моем случае лист так и называется — Исходные данные)
  3. жмем на ярлычке этого листа правой кнопкой мыши —Исходный текст(View code):
    Модуль листа
  4. вставляем туда следующий код:
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
        'проверяем - изменения внутри умной таблицы или нет
        If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
            'если внутри таблицы, то обновляем сводную таблицу на листе "Автообновляемая сводная"
            Sheets("Автообновляемая сводная").PivotTables(1).RefreshTable
            'для всех сводных на листе
    '        Dim pt As PivotTable
    '        For Each pt In Sheets("Автообновляемая сводная").PivotTables
    '            pt.RefreshTable
    '        Next
        End If
    End Sub
  5. Сохраняем файл(это опционально :))

Все, теперь при любом изменении внутри исходных данных(будь это добавление/удаление строк или просто изменение значений внутри таблицы) сводная таблица обновиться без занудных действий вроде выделения сводной и жмахания кнопки Обновить.
Пара важных комментариев к коду:

  • Sheets(«Автообновляемая сводная») — здесь Автообновляемая сводная это имя листа, на котором расположена сводная таблица. Это очень важно. Если будет указано неверное имя листа — код выдаст ошибку и никакого обновления, конечно же, не произойдет
  • код сделан таким образом, что на листе исходных данных должна быть только одна умная таблица. Нет, их может быть несколько, но код будет ориентироваться исключительно на первую. И если вы плохо знакомы с принципами создания объектов — то лучше не рисковать. Хотя и здесь можно выйти из положения. Если вы знаете имя своей умной таблицы(его можно подсмотреть на вкладке Конструктор -группа Свойства), то можно изменить код так:
    вместо строки
    If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
    записать такую
    If Not Intersect(Target, Target.Parent.ListObjects(«Таблица1»).Range) Is Nothing Then
    где Таблица1 — имя вашей умной таблицы, на основании которой создана сводная.
  • тот же нюанс с листом самой сводной — код ориентирован так, что обновляет только первую сводную на листе Автообновляемая сводная. Здесь так же можно заменить цифру 1 на имя сводной(например .PivotTables(«СводнаяТаблица1»).RefreshTable), либо же сделать обновление всех сводных. Для этого надо раскомментировать блок ‘для всех сводных на листе(убрать апострофы перед строками) и убрать строку с именем листа, чтобы получилось так:
    Private Sub Worksheet_Change(ByVal Target As Range)
        'проверяем - изменения внутри умной таблицы или нет
        If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
            'если внутри таблицы, то обновляем все сводные на листе "Автообновляемая сводная"
            Dim pt As PivotTable
            For Each pt In Sheets("Автообновляемая сводная").PivotTables
                pt.RefreshTable
            Next
        End If
    End Sub

    но этот вариант удобен лишь в том случае, если на данных одной умной таблицы созданы различные сводные таблицы для отображения некоей динамики в различных проекциях.

  • P.S. Так же можно использовать и иной подход — вставить в модуль листа Автообновляемая сводная такой код:

    Private Sub Worksheet_Activate()
        Me.PivotTables(1).RefreshTable
    End Sub

    тогда сводная на листе будет обновляться лишь тогда, когда будет активирован лист со сводной. Плюсы подобного подхода очевидны в случаях, если часто приходится менять исходные данные. В первом коде сводная будет обновляться при каждом ручном изменении в исходных данных, даже если после этого мы не переходили на лист сводной, а дальше стали делать изменения в исходных данных.

    Скачать файл с автообновляемой сводной таблицей:

      Tips_PT_AutoRefreshPT.xlsm (46,5 KiB, 3 041 скачиваний)


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

 

Vla_dimir

Пользователь

Сообщений: 8
Регистрация: 09.11.2013

Проблема: Есть таблица на листе, в которой постоянно добавляются строки. На основе данных этого листа построена сводная таблица. Приходится постоянно подправлять источник данных на величину добавленных строк. Как сделать та что бы сводная таблица обновлялась автоматически например кнопкой или при открытии листа сводной таблицы

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Попробовать записать обновление макрорекордером или

сюда

 

vector1

Пользователь

Сообщений: 250
Регистрация: 23.12.2012

OfficeProPlus 365×64
Win10ProX64forWorkstation

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Сводная с динамическими диапазонами работает?

 

Vla_dimir

Пользователь

Сообщений: 8
Регистрация: 09.11.2013

про макрорекодер нет ни какого смысла

 

Vla_dimir

Пользователь

Сообщений: 8
Регистрация: 09.11.2013

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#7

09.11.2013 21:37:25

Цитата
про макрорекодер нет ни какого смысла

Почему?

 

vector1

Пользователь

Сообщений: 250
Регистрация: 23.12.2012

умная таблица + макрорекордер
сделаете кнопку
обновлять вручную диапазон не нужно
а таблица будет обновляться как нужно

OfficeProPlus 365×64
Win10ProX64forWorkstation

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Не — макрорекордер «нет ни какого смысла»  :)

 

gling

Пользователь

Сообщений: 4024
Регистрация: 01.01.1970

#10

09.11.2013 21:52:42

Цитата
Приходится постоянно подправлять источник данных на величину добавленных строк.

Обозначьте источник данных до конца листа. В сводной установите фильтр не показывать пустые строки. При обновлении таблицы по нажатию мышки новое будет отражаться в таблице, пустые строки нет.
В 2007 офисе так можно в 2003 не помню.

Изменено: gling09.11.2013 21:56:16

 

alexeySV

Пользователь

Сообщений: 54
Регистрация: 15.10.2013

#11

10.11.2013 06:28:15

Тут все просто! Вам правильно подсказали — сделайте таблицу с данными «умной». Диапазон данных для сводной будет ссылаться не на диапазон, а на имя типа «таблица43″(обозвал — условно), если нет — то укажите ваши данные еще раз! А в модуль листа добавьте :

Код
Private Sub Worksheet_Activate()
ActiveSheet.PivotTables("Имя вашей сводной таблицы").PivotCache.Refresh
End Sub

При добавлении в умную таблицу, диапазон ее расширяется. А при активации листа, макрос автоматически обновляет сводную. Все работает! Проверено!

 

Vla_dimir

Пользователь

Сообщений: 8
Регистрация: 09.11.2013

<<Обозначьте источник данных до конца листа. В сводной установите фильтр не показывать пустые строки. При обновлен……………>>
да это так и это можно сделать но сводная таблица сложная и ставить фильтр не показывать пустые нужно ставить во многих местах что не совсем удобно. Мне бы типа

http://forum.shelek.ru/index.php/topic,7828.0.htm

 

gling

Пользователь

Сообщений: 4024
Регистрация: 01.01.1970

Не представляю что за сложная таблица. Если по первому столбцу таблицы убрать пустые ячейки, то они уберутся  во всех столбцах сводной таблицы, зачем их убирать в других местах. Или у вас не «сводная таблица», а самостоятельно сделанная на подобие сводной.

 

Vla_dimir

Пользователь

Сообщений: 8
Регистрация: 09.11.2013

#14

10.11.2013 08:43:40

Внимательно посмотрел умную таблицу Все ОК Это мой случай да удивительная вещь Знать не знал Всем спасибо

В настоящей заметке представлена коллекция простых и изящных инструментов работы со сводными таблицами в Excel. То, что по-английски называется tips & tricks. Выделите время и ознакомьтесь с приводимыми здесь советами. [1] Кто знает, может быть, вы наконец-то найдете ответ на долго мучивший вас вопрос?

Совет 1. Автоматическое обновление сводных таблиц

Иногда требуется, чтобы сводные таблицы обновлялись автоматически. Предположим, вы создали сводную таблицу для менеджера. Вряд ли вы сможете регулярно обновлять ее, разве что менеджер допустит вас к своему ноутбуку. Можно включить автоматическое обновление сводной таблицы, которое будет выполняться всякий раз при открытии книги:

  1. Щелкните правой кнопкой мыши на сводной таблице и в контекстном меню выберите пункт Параметры сводной таблицы.
  2. В появившемся диалоговом окне Параметры сводной таблицы выберите вкладку Данные.
  3. Установите флажок Обновить при открытии файла.

Рис. 1. Включите опцию Обновить при открытии файла

Рис. 1. Включите опцию Обновить при открытии файла

Флажок Обновить при открытии файла следует устанавливать для каждой сводной таблицы отдельно.

Скачать заметку в формате Word или pdf, примеры в формате Excel (файл содержит код VBA).

Совет 2. Одновременное обновление всех сводных таблиц книги

Если в рабочей книге содержится несколько сводных таблиц, одновременное их обновление может быть проблематичным. Существует несколько способов преодолеть эти трудности:

Способ 1. Можно выбрать для каждой сводной таблицы, входящей в состав рабочей книги, настройку, задающую автоматическое обновление при открытии книги (подробнее см. Совет 1).

Способ 2. Обновлять каждую сводную таблицу в рабочей книге можно с помощью макроса. Этот способ идеален в том случае, когда нужно обновлять сводную таблицу по требованию, а не только при открытии рабочей книги. Включите запись макроса. Затем в режиме записи макроса выберите каждую сводную таблицу в рабочей книге и обновите ее. По завершении обновления всех сводных таблиц остановите запись макроса. В результате вы получите макрос, который может вызываться в случае необходимости и обновлять все сводные таблицы (подробнее см. Макросы в сводных таблицах).

Способ 3. Воспользуйтесь кодом VBA для обновления всех сводных таблиц в рабочей книге по требованию. Данный подход предусматривает использование метода RefreshAll объекта Workbook. Для использования этой методики создайте новый модуль и введите следующий код:

Sub Refresh_All()

ThisWorkbook.RefreshAll

End Sub

Учтите, что метод RefreshAll наравне со сводными таблицами обновляет все внешние диапазоны данных. Если рабочая книга содержит данные из внешних источников, например, базы данных или внешние файлы, все они будут обновлены вместе со сводными таблицами (подробнее о записи кода VBA см. VBA в сводных таблицах).

Совет 3. Сортировка элементов данных в произвольном порядке

На рис. 2 показан заданный по умолчанию порядок отображения регионов в сводной таблице. Регионы отсортированы в алфавитном порядке: Запад, Север, Средний Запад и Юг. Если ваши корпоративные правила требуют, чтобы сначала отображался регион Запад, а затем — регионы Средний Запад, Север и Юг, выполните ручную сортировку. Просто введите Средний Запад в ячейку С4 и нажмите клавишу Enter. Порядок сортировки регионов изменится.

Рис. 2. Регионы отображаются в алфавитном порядке

Рис. 2. Регионы отображаются в алфавитном порядке

Совет 4. Преобразование сводной таблицы в жестко заданные значения

Цель создания сводной таблицы — суммирование и отображение данных в подходящем формате. Исходные данные для сводной таблицы хранятся отдельно, в связи с чем возникают определенные «накладные расходы». Преобразование сводной таблицы в значения позволит использовать полученные в ней результаты без обращения к исходным данным либо кешу сводной таблицы. Способ преобразования сводной таблицы зависит от того, затрагивается ли вся таблица или только ее часть.

Для преобразования части сводной таблицы выполните следующие действия:

  1. Выделите копируемые данные сводной таблицы, щелкните правой кнопкой мыши и в контекстном меню выберите пункт Копировать (или наберите на клавиатуре Ctrl+C).
  2. Щелкните правой кнопкой мыши в произвольном месте рабочего листа и в контекстном меню выберите команду Вставить (или наберите Ctrl+V).

Если нужно преобразовать всю сводную таблицу, выполните следующие действия:

  1. Выделите всю сводную таблицу, щелкните правой кнопкой мыши и в контекстном меню выберите пункт Копировать. Если сводная не содержит область ФИЛЬТРЫ, то для выделения области сводной таблицы можно воспользоваться клавиатурным сокращением Ctrl+Shift+*.
  2. Щелкните правой кнопкой мыши в произвольном месте листа и в контекстном меню выберите параметр Специальная вставка.
  3. Выберите параметр Значения и щелкните ОК.

Перед преобразованием сводной таблицы целесообразно удалить промежуточные итоги, поскольку они не слишком нужны в автономном наборе данных. Чтобы удалить все промежуточные итоги пройдите по меню Конструктор -> Промежуточные итоги -> Не показывать промежуточные итоги. Для удаления конкретных промежуточных итогов щелкните правой кнопкой мыши на ячейке, в которой эти итоги вычисляются. Выберите в контекстном меню пункт Параметры поля и в диалоговом окне Параметры поля в разделе Итоги выберите переключатель Нет. После щелчка на кнопке ОК промежуточные итоги будут удалены.

Совет 5. Заполнение пустых ячеек в полях СТРОКИ

После преобразования сводной таблицы на листе отображаются не только значения, но и вся структура данных сводной таблицы. Например, данные, показанные на рис. 3, были получены на основе сводной таблицы с макетом в табличной форме.

Рис. 3. Преобразованная сводная таблица без заполнения пустых ячеек

Рис. 3. Использовать эту преобразованную сводную таблицу без заполнения пустых ячеек в левой части проблематично

Обратите внимание на то, что поля Регион и Рынок сбыта сохраняет ту же структуру строк, которая присуща при нахождении этих данных в области СТРОКИ сводной таблицы. В Excel 2013 существует быстрый способ заполнения ячеек в области СТРОКИ значениями. Кликните в области сводной таблицы, после чего пройдите по меню Конструктор -> Макет отчета -> Повторять все подписи элементов (рис. 4). После этого можно преобразовать сводную таблицу в значения, в результате чего вы получите таблицу данных без пробелов.

Рис. 4. Результат применения команды Повторять все подписи элементов

Рис. 4. После применения команды Повторять все подписи элементов заполняются все пустые ячейки

Совет 6. Ранжирование числовых полей сводной таблицы

В процессе сортировки и ранжирования полей, содержащих большое количество элементов данных, не всегда легко определить числовой ранг анализируемого элемента данных. Более того, если сводная таблица будет преобразована в значения, назначенный каждому элементу данных числовой ранг, отображенный в целочисленном поле, значительно облегчит анализ созданного набора данных. Откройте сводную таблицу, подобную показанной на рис. 5. Обратите внимание на то, что один и тот же показатель — Сумма по полю Объем продаж — отображается дважды. Щелкните правой кнопкой мыши на втором экземпляре показателя и в контекстном меню выберите команду Дополнительные вычисления -> Сортировка от максимального к минимальному (рис. 6.)

После создания ранга можно настроить подписи полей и форматирование (рис. 14.9). В результате будет получен красивый ранжированный отчет.

Рис. 5. Создайте сводную таблицу, в которой объем продаж в области ЗНАЧЕНИЯ выводится дважды

Рис. 5. Создайте сводную таблицу, в которой объем продаж в области ЗНАЧЕНИЯ выводится дважды

Рис. 6. Сортировка от максимальных значений к минимальным с помощью дополнительных вычислений

Рис. 6. Сортировка от максимальных значений к минимальным с помощью дополнительных вычислений

Рис. 7. Перед вами завершенный ранжированный отчет

Рис. 7. Перед вами завершенный ранжированный отчет

Совет 7. Уменьшение размера отчета сводной таблицы

При формировании отчета сводной таблицы Excel создает снимок данных и сохраняет его в кеше сводной таблицы. Кеш сводной таблицы представляет собой специальную область памяти, в которой хранится копия источника данных для ускорения доступа. Другими словами, Excel создает копию данных, а затем хранит ее в кеше, связанном с рабочей книгой. Кеш сводной таблицы обеспечивает оптимизацию рабочего процесса. Любые изменения, внесенные в сводную таблицу, такие как изменение расположения полей, добавление новых полей либо сокрытие каких-либо элементов, выполняются быстрее, а требования к системным ресурсам оказываются гораздо скромнее. Основной недостаток кеша сводной таблицы заключается в том, что в результате его применения практически вдвое увеличивается размер файла рабочей книги при каждом создании сводной таблицы «с нуля».

Удаляйте исходные данные. Если рабочая книга содержит исходный набор данных и сводную таблицу, размер ее файла увеличивается вдвое. Поэтому можете спокойно удалить исходные данные, и это совершенно не отразится на функциональности вашей сводной таблицы. После удаления исходных данных не забудьте сохранить сжатую версию файла рабочей книги. После удаления исходных данных можно использовать сводную таблицу в обычном режиме. Единственная проблема заключается в невозможности обновления сводной таблицы из-за отсутствия исходных данных. Если же вам понадобятся исходные данные, щелкните дважды на пересечении строки и столбца в области общих итогов (на рис. 7 это ячейка В18). При этом Excel выгружает содержимое кеша сводных таблиц на новый рабочий лист.

Совет 8. Создание автоматически развертываемого диапазона данных

Наверняка вы не раз сталкивались с ситуациями, когда приходилось ежедневно обновлять отчеты сводных таблиц. Необходимость в этом чаще всего возникает тогда, когда в источник данных постоянно добавляются новые записи. В таких случаях придется повторно определить используемый ранее диапазон, прежде чем новые записи будут добавлены в новую сводную таблицу. Повторное определение исходного диапазона данных для сводной таблицы не представляет особого труда, но, когда этим приходится заниматься часто, подобная процедура становится весьма утомительной.

Решение проблемы заключается в том, чтобы преобразовать исходный диапазон данных в таблицу еще до создания сводной таблицы. Благодаря таблицам Excel можно создать именованный диапазон, который может автоматически расширяться либо сужаться в зависимости от объема находящихся в нем данных. Также можно связать любой компонент, диаграмму, сводную таблицу либо формулу с диапазоном, в результате чего у вас появится возможность отслеживать изменения в наборе данных.

Для реализации описанной методики выделите исходные данные, а затем щелкните на значке таблицы, находящемся на вкладке Вставка (рис. 8) или нажмите Ctrl+T (Т английское). Щелкните ОК в открывшемся окне. Обратите внимание на то, что, хотя диапазон исходных данных в сводной таблице переопределять не нужно, но при добавлении исходных данных в диапазон в сводной таблице все равно придется щелкнуть на кнопке Обновить.

Рис. 8. Преобразование исходных данных в таблицу

Рис. 8. Преобразование исходных данных в таблицу

Совет 9. Сравнение обычных таблиц с помощью сводной таблицы

Если вы выполняете сравнительный анализ двух различных таблиц, удобно воспользоваться сводной таблицей, что существенно сэкономит время. Предположим, имеются две таблицы, в которых отображаются сведения о заказчиках за 2011 и 2012 годы (рис. 9). Небольшие размеры этих таблиц приведены здесь исключительно в качестве примеров. На практике используются таблицы, имеющие гораздо большие размеры.

Рис. 9. Вам предстоит сравнить эти две таблицы

Рис. 9. Вам предстоит сравнить эти две таблицы

В процессе сравнения создается одна таблица, на основе которой создается сводная таблица. Убедитесь в том, что у вас имеется способ пометить данные, относящиеся к этим таблицам. В рассматриваемом примере для этого используется столбец Фискальный год (рис. 10). После объединения двух таблиц воспользуйтесь полученным комбинированным набором данных для создания новой сводной таблицы. Отформатируйте сводную таблицу таким образом, чтобы в качестве тега таблицы (идентификатор, указывающий на происхождение таблицы) использовалась область столбцов сводной таблицы. Как показано на рис. 11, годы находятся в области столбцов, а сведения о заказчиках — в области строк. В области данных содержатся объемы продаж для каждого заказчика.

Рис. 10. На основе двух исходных таблиц создается одна результирующая

Рис. 10. На основе двух исходных таблиц создается одна результирующая

Рис. 11. Создайте сводную таблицу, которая позволяет визуально сравнить два набора данных

Рис. 11. Создайте сводную таблицу, которая позволяет визуально сравнить два набора данных

Совет 10. Автоматическая фильтрация сводной таблицы

Как известно, в сводных таблицах нельзя применять автофильтры. Тем не менее существует трюк, позволяющий включить автофильтры в сводную таблицу. Принцип использования этой методики заключается в том, чтобы поместить указатель мыши справа от последнего заголовка сводной таблицы (ячейка D3 на рис. 12), а затем перейдите на ленту и выбрать команду Данные -> Фильтр. Начиная с этого момента в вашей сводной таблице появляется автофильтр! Например, вы сможете выбрать всех заказчиков с уровнем транзакций выше среднего. С помощью автофильтров в сводную таблицу добавляется дополнительный уровень аналитики.

Рис. 12. Трюк по использованию автофильтра в сводной таблице

Рис. 12. Трюк по использованию автофильтра в сводной таблице

Совет 11. Преобразование наборов данных, отображаемых в сводных таблицах

Наилучший макет для исходных данных, преобразованных в сводную таблицу, — это табличный макет. Этому виду макета присущи следующие признаки: отсутствуют пустые строки либо столбцы, каждый столбец имеет заголовок, каждому полю соответствуют значения в каждой строке, а столбцы не содержат повторяющихся групп данных. На практике часто встречаются наборы данных, напоминающие то, что показано на рис. 13. Как видите, названия месяцев отображаются в строке вдоль верхнего края таблицы, выполняя двойную функцию — подписей столбцов и фактических данных. В сводной таблице, созданной на основе подобной таблицы, это приведет к тому, что придется управлять 12 полями, каждое из которых представляет отдельный месяц.

Рис. 13. Эту таблицу в матричном стиле следует преобразовать в табличный набор данных

Рис. 13. Эту таблицу в матричном стиле следует преобразовать в табличный набор данных

Для устранения этой проблем можно воспользоваться в качестве промежуточного этапа сводной таблицей с несколькими консолидированными диапазонами (подробнее см. Сводная таблица на основе нескольких листов или диапазонов консолидации). Для преобразования набора данных, имеющего матричный стиль, в набор данных, более подходящий для создания сводных таблиц, выполните следующие действия.

Шаг 1. Объединение всех полей, не относящихся к области столбцов, в один столбец. Для создания сводных таблиц с несколькими консолидированными диапазонами следует создать единственный столбец размерности. В рассматриваемом примере все, что не относится к полю месяца, рассматривается как размерность. Поэтому поля Рынок сбыта и Описание услуги следует объединить в один столбец. Для объединения полей в один столбец просто введите формулу, которая выполняет конкатенацию этих двух полей, используя точку с запятой в качестве разделителя. Присвойте новому столбцу имя. Введенная формула отображается в строке формул (рис. 14).

Рис. 14. Результат конкатенации столбцов Рынок сбыта и Описание услуги

Рис. 14. Результат конкатенации столбцов Рынок сбыта и Описание услуги

После создания конкатенированного столбца преобразуйте формулы в значения. Для этого выделите только что созданный столбец, нажмите Ctrl+C, после чего выполните команду Вставить -> Специальная вставка -> Значения. Теперь можно удалить столбцы Рынок сбыта и Описание услуги (рис. 15).

Рис. 15. Удалены столбцы Рынок сбыта и Описание услуги

Рис. 15. Удалены столбцы Рынок сбыта и Описание услуги

Шаг 2. Создание сводной таблицы с несколькими диапазонами консолидации. Теперь нужно вызвать знакомый многим пользователям по предыдущим версиям Excel мастер сводных таблиц и диаграмм. Для вызова этого мастера нажмите комбинацию клавиш Alt+D+P. К сожалению, эта комбинация клавиш предназначена для англоязычной версии Excel 2013. В русскоязычной версии ей соответствует комбинация клавиш Alt+Д+Н. Но она по неизвестным мне причинам не работает. Тем не менее, можно вывести старый добрый мастер сводных таблиц на панель быстрого доступа, см. Использование мастера сводных таблиц. После запуска мастера установите переключатель В нескольких диапазонах консолидации. Кликните Далее. Установите переключатель Создать поля страницы и щелкните Далее. Определите рабочий диапазон и кликните Готово (подробнее см. Сводная таблица на основе нескольких листов или диапазонов консолидации). Вы создадите сводную таблицу (рис. 16).

Рис. 16. Сводная на основе нескольких диапазонов консолидации

Рис. 16. Сводная на основе нескольких диапазонов консолидации

Шаг 3. Дважды щелкните на пересечении строки и столбца в строке общих итогов. На этом этапе в вашем распоряжении окажется сводная таблица (рис. 16), включающая несколько диапазонов консолидации, которая является практически бесполезной. Выберите ячейку, находящуюся на пересечении строки и столбца общих итогов, и дважды щелкните на ней (в нашем примере это ячейка N88). Вы получите новый лист, структура которого напоминает структуру, показанную на рис. 17. Фактически этот лист представляет собой транспонированную версию исходных данных.

Рис. 17. Исходный набор данных был транспонирован

Рис. 17. Исходный набор данных был транспонирован

Шаг 4. Разбиение столбца Строка на отдельные поля. Осталось разбить столбец Строка на отдельные поля (вернуться к изначальной структуре). Добавьте один пустой столбец сразу же после столбца Строка. Выделите столбец А, а затем перейдите на вкладку ленты Данные и щелкните на кнопке Текст по столбцам. На экране появится диалоговое окно Мастер распределения текстов по столбцам. На первом шаге выберите переключатель С разделителями и щелкните на кнопке Далее. В следующем шаге выберите переключатель точка с запятой и щелкните Готово. Отформатируйте текст, добавьте заголовок и превратите исходные данные в таблицу путем нажатия Ctrl+T (рис. 18).

Рис. 18. Этот набор данных идеально подходит для создания сводной таблицы

Рис. 18. Этот набор данных идеально подходит для создания сводной таблицы (сравните с рис. 13)

Совет 12. Включение двух числовых форматов в сводную таблицу

А теперь рассмотрим ситуацию, когда нормализованный набор данных затрудняет построение удобной для анализа сводной таблицы. Примером может служить показанная на рис. 19 таблица, которая включает два разных показателя для каждого рынка сбыта. Обратите внимание на столбец D, который идентифицирует показатель.

Рис. 19. Эта таблица включает несколько типов данных для одного поля из области значений

Рис. 19. Эта таблица включает несколько типов данных для одного поля из области значений

Несмотря на то что эта таблица может служить примером неплохого форматирования, не все так хорошо. Обратите внимание на то, что одни показатели должны отображаться в числовом формате, а другие — в процентном. Но в исходной базе данных поле Значение имеет тип Double. При создании сводной таблицы на основе набора данных невозможно присвоить два разных числовых формата одному полю Значение. Здесь действует простое правило: одно поле соответствует одному числовому формату. Попытка назначить числовой формат полю, которому был присвоен процентный формат, приведет к тому, что процентные значения превратятся в обычные числа, которые завершаются знаком процента (рис. 20).

Рис. 20. Каждому показателю можно присвоить только один числовой формат

Рис. 20. Каждому показателю можно присвоить только один числовой формат

Для решения этой проблемы применяется пользовательский числовой формат, который любое значение, большее 1,5, форматирует как число. Если же значение меньше 1,5, оно форматируется как процент. В диалоговом окне Формат ячеек выберите вкладку (все форматы) и в поле Тип введите следующую форматирующую строку (рис. 21): [>=1,5]$# ##0; [<1,5]0,0%

Рис. 21. Примените пользовательский числовой формат

Рис. 21. Примените пользовательский числовой формат, в котором любые числа, меньшие 1,5, форматируются как проценты

Полученный результат показан на рис. 22. Как видите, теперь каждый показатель отформатирован корректно. Конечно, приведенный в этом совете рецепт не универсален. Скорее, он указывает направление, в котором стоит экспериментировать.

Рис. 22. Два числовых формата в одном поле данных

Рис. 22. Два числовых формата в одном поле данных!

Совет 13. Создание частотного распределения для сводной таблицы

Если вы когда-либо создавали частотные распределения с помощью функции ExcelЧастота, то, наверное, знаете, что это весьма непростая задача. Более того, после изменений диапазонов данных все приходится начинать сначала. В этом разделе вы научитесь создавать простые частотные распределения с помощью обычной сводной таблицы. Вначале создайте сводную таблицу, в области строк которой находятся данные. Обратите внимание на рис. 23, где в области строк находится поле Объем продаж.

Рис. 23. Поместите данные в область строк

Рис. 23. Поместите данные в область строк

Щелкните правой кнопкой мыши на любом значении в области строк и в контекстном меню выберите параметр Группировать. В диалоговом окне Группирование (рис. 24) определите значения параметров, определяющих начало, конец и шаг частотного распределения. Щелкните ОК.

Рис. 24. В диалоговом окне Группирование настройте параметры частотного распределения

Рис. 24. В диалоговом окне Группирование настройте параметры частотного распределения

Если в сводную таблицу добавить поле Заказчик (рис. 25), получим частотное распределение транзакций заказчиков относительно размера заказов (в долларах).

Рис. 25. Распределение транзакций заказчиков в соответствии с размерами заказов (в долларах)

Рис. 25. Теперь в вашем распоряжении оказалось распределение транзакций заказчиков в соответствии с размерами заказов (в долларах)

Преимущество описанной методики заключается в том, что фильтр отчета сводной таблицы может применяться для интерактивной фильтрации данных, основанных на других столбцах, таких как Регион и Рынок сбыта. У пользователя также имеется возможность быстрой настройки интервалов частотного распределения путем щелчка правой кнопкой мыши на любом числе в области строк с последующим выбором параметра Группировать. Для наглядности представления может быть добавлена сводная диаграмма (рис. 26).

Рис. 26. Сводная диаграмма частотного распределения

Рис. 26. Сводная диаграмма частотного распределения

Совет 14. Использование сводной таблицы для распределения набора данных по листам книги

Аналитикам часто приходится создавать различные отчеты сводных таблиц для каждого региона, рынка сбыта, менеджера и т.п. Выполнение этой задачи обычно подразумевает длительный процесс копирования сводной таблицы на новый лист и последующее изменение поля фильтра с учетом соответствующего региона и менеджера. Этот процесс выполняется вручную и повторяется для каждого вида анализа. Но вообще-то создание отдельных сводных таблиц можно поручить Excel. В результате применения параметра Отобразить страницы фильтра отчета автоматически создается отдельная сводная таблица для каждого элемента, находящегося в области полей фильтра. Для использования этой функции просто создайте сводную таблицу, включающую поле фильтра (рис. 27). Поместите курсор в любом месте сводной таблицы и на вкладке Анализ в группе команд Сводная таблица щелкните на раскрывающемся списке Параметры (рис. 28). Затем щелкните на кнопке Отобразить страницы фильтра отчета.

Рис. 27. Начните с создания сводной таблицы, которая содержит поле фильтра

Рис. 27. Начните с создания сводной таблицы, которая содержит поле фильтра

Рис. 28. Щелкните на кнопке Отобразить страницы фильтра отчета

Рис. 28. Щелкните на кнопке Отобразить страницы фильтра отчета

В появившемся диалоговом окне (рис. 29) можно выбрать поле фильтра, для которого будут созданы отдельные сводные таблицы. Выберите подходящее поле фильтра и щелкните ОК.

Рис. 29. Диалоговое окно Отображение страниц фильтра отчета

Рис. 29. Диалоговое окно Отображение страниц фильтра отчета

Для каждого элемента поля фильтра будет создана сводная таблица, помещенная на отдельный лист (рис. 30). Обратите внимание на то, что ярлычки листов называются так же, как и элементы поля фильтра. Учтите, что параметр Отобразить страницы фильтра может применяться к полям фильтра поочередно.

Рис. 30. Отдельная сводная таблица для каждого рынка сбыта

Рис. 30. Отдельная сводная таблица для каждого рынка сбыта

Совет 15. Использование сводной таблицы для распределения набора данных по отдельным книгам

В совете 14 мы воспользовались специальной опцией для разделения сводных таблиц по рынкам сбыта на разных листах рабочей книги. Если же вам нужно разделить исходные данные по разным рынкам сбыта в отдельных книгах, можно воспользоваться небольшим кодом VBA. Для начала поместите поле, на основе которого будет выполняться фильтрация, в область полей фильтра. Поместите поле Объем продаж в область значений (рис. 31). Предлагаемый код VBA поочередно выбирает каждый элемент ФИЛЬТРА и вызывает функцию Показать детали, создавая новый лист с данными. Затем этот лист сохраняется в новой рабочей книге

Рис. 31. Исходная сводная таблица

Рис. 31. Исходная сводная таблица

Код VBA.

Sub ExplodeTable()

Dim PvtItem As PivotItem

Dim PvtTable As PivotTable

Dim strfield As PivotField

‘Изменение переменных в соответствии со сценарием

ConststrFieldName = "Рынок сбыта"   ‘<—Изменение имени поля

Const strTriggerRange = "A4"    ‘<—Изменение диапазона триггера

‘Изменение названия сводной таблицы (при необходимости)

SetPvtTable = ActiveSheet.PivotTables("PivotTable1") ‘<—Изменение названия сводной

‘Циклический обход каждого элемента выделенного поля

For Each PvtItem In PvtTable.PivotFields(strFieldName).PivotItems

PvtTable.PivotFields(strFieldName).CurrentPage = PvtItem.Name

Range(strTriggerRange).ShowDetail = True

‘Присваивание имени временному листу

ActiveSheet.Name = "TempSheet"

‘Копирование данных в новую книгу и удаление временного листа

ActiveSheet.Cells.Copy

Workbooks.Add

ActiveSheet.Paste

Cells.EntireColumn.AutoFit

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs _

Filename:=ThisWorkbook.Path & "" & PvtItem.Name & ".xlsx"

ActiveWorkbook.Close

Sheets("Tempsheet").Delete

Application.DisplayAlerts = True

NextPvtItem

EndSub

Введите этот код в новый модуль VBA. Проверьте значения следующих констант и переменных и в случае необходимости измените их:

  • Const strFieldName. Имя поля, используемого для разделения данных. Другими словами, это поле, которое помещается в область фильтра/страниц сводной таблицы.
  • Const strTriggerRange. Ячейка триггера, в котором хранится единственное число из области данных сводной таблицы. В нашем случае ячейкой триггера является А4 (см. рис. 31).

В результате выполнения кода VBA данные для каждого рынка сбыта будут сохранены в отдельной книге.

[1] Заметка написана на основе книги Джелен, Александер. Сводные таблицы в Microsoft Excel 2013. Глава 14.

Понравилась статья? Поделить с друзьями:
  • Макрос для обновления данных excel
  • Макрос для вставки картинки в ячейку excel
  • Макрос для всех страниц в excel
  • Макрос для всех книг excel при открытии
  • Макрос для всех книг excel в папке