Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава

Работа со сводными таблицами

Вэтой главе...

Вводный пример

Создание сложных сводных таблиц

Создание нескольких сводных таблиц

Создание обратной сводной таблицы

Эта глава посвящена сводным таблицам Excel — одной из важнейших тем, которую просто невозможно обойти стороной.

Вводный пример

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

Создав сводную таблицу на основе базы данных или списка, можно быстро отобра­ зить необходимые итоговые данные, которые другим способом представить на экране или бумаге просто невозможно. Кроме того, такое представление данных можно полу­ чить очень быстро. В Excel также поддерживается возможность создания кода VBA, ко­ торый позволяет управлять сводными таблицами.

Этот раздел начинается с простого примера использования кода VBA для создания сводной таблицы.

На рис. 17.1 показана простая база данных на рабочем листе. Она состоит из четырех

полей: П р е д с т а в и т е л ь , Р е ги о н , М ес яц и П родаж и . Записывается объем продаж оп­

ределенного торгового представителя за определенный месяц.

Глава 17. Работа со сводными таблицами

539

Sub RecordedM acro()

 

 

R a n g e ("A l").S e le c t

 

 

Sheets.Add

 

 

 

 

A ctive W o rkbo ok . P ivo tC a ch e s . C reate _

 

(S ourceType: = xlD atab ase ,

_

 

S ourceD ata:= "Л ист1! R1C1: R13C4",

 

V e rs io n : = x lP iv o tT a b le V e rs io n l4 ) . C re a te P iv o tT a b le _

T a b le D e s tin a tio n : = "Л ист2! R3C1" , _

 

TableName: = " P iv o tT a b le l" ,

_

 

D e fa u ltV e rs io n : = x lP iv o tT a b le V e rs io n l4 )

 

S h ee ts( "Л ист2" ) .S e le c t

 

 

C e lls (3 , 1 ) . S e le c t

 

_

W ith

A c tiv e S h e e t. P iv o tT a b le s ( " P iv o tT a b le l" )

. P iv o tF ie ld s ( " Представитель")

 

.O r ie n ta tio n

= x lR o w F ie ld

 

 

.P o s itio n

=

1

 

 

End

W ith

 

 

 

 

W ith

A c tiv e S h e e t. P iv o tT a b le s ( " P iv o tT a b le l" )

_

. P iv o tF ie ld s ( "М есяц")

 

 

.O r ie n ta tio n

= x lC o lu m n F ie ld

 

.P o s itio n

=

1

 

 

End

W ith

 

 

 

 

A c tiv e S h e e t. P iv o tT a b le s ( " P iv o tT a b le l") _

 

.A d d D a ta F ie ld A c tiv e S h e e t. P iv o tT a b le s ( " P iv o tT a b le l" ) _

. P iv o tF ie ld s ( "Продажи") ,

"И то го ", xlSum

_

W ith

A c tiv e S h e e t. P iv o tT a b le s ( " P iv o tT a b le l" ) .

P iv o tF ie ld s ( " Р е гио н")

 

 

.O r ie n ta tio n

= x lP a g e F ie ld

 

.P o s itio n

=

1

 

 

End

W ith

 

 

 

 

End Sub

Запуск записанного макроса, скорее всего, приведет к ошибке. В процессе проверки кода вы обнаружите, что функция записи макроса “жестко закодировала” название рабочего листа (Лист2), на котором создается сводная таблица. Если подобный лист уже существует (либо добавляется новый лист с другим именем), выполнение макроса приведет к ошибке.

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

Просмотр созданного кода

Код VBA, записанный при создании сводной таблицы, может привести вас в замеша­ тельство. Для того чтобы разобраться в записанном макросе, потребуется кое-что знать об используемых объектах (соответствующая информация содержится в интерактивном справочном руководстве).

P iv o tC a c h e s — коллекция объектов P iv o tC a c h e в объекте W orkbook

 

(данные для сводной таблицы, которые хранятся в кэш-памяти сводных таблиц).

P iv o tT a b le s

— коллекция объектов P iv o tT a b le в объекте W o rk s h e e t.

P iv o t F ie ld s

— коллекция полей в объекте P iv o tT a b le .

P iv o t Ite m s — коллекция отдельных элементов данных в поле.

C re a te P iv o tT a b le — метод объекта P iv o tC a c h e , который создает сводную

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

540

Часть V. Профессиональные методы программирования

Вы бор данны х для сводной таблицы

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

Поля в таблице базы данных, на основе которой создается сводная таблица, отно­ сятся к следующим двум типам.

Данные (Data). Включает суммируемые значения либо данные. Например, в слу­ чае с банковским счетом поле Сумма является полем данных.

Категория (Category). Описывает данные. Например, в случае с тем же банков­ ским счетом ПОЛЯ Дата, Т ип _ счета, Открыто, Отделение И Владелец _счета ЭТО

примеры полей категории, описывающие данные в поле Сумма.

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

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

Если изложенная выше концепция не вполне понятна, обратитесь к находящемуся на прилагаемом к книге компакт-диске файлу n o rm a liz e d d a ta .x ls x . Эта рабочая книга содержит пример диапазона данных до и после выполнения нормализации, яв­ ляющейся необходимым условием построения сводной таблицы.

Усоверш енствование записанного кода

сводной таблицы

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

Sub C re a te P iv o tT a b le ()

Dim

PTCache As P ivotC ache

Dim

PT As P iv o tT a b le

'Выделение кэш -пам яти

Set PTCache = A ctive W o rkb o o k . P ivo tC a ch e s . C re a te ( _

SourceType: = xlD a ta b a se / _

S ourceD ata: =Range( " A l " ) . C urren tR eg io n )

' Добавление нового листа в сводную таблицу

W orksheets.A dd

1 Создание сводной таблицы

Set PT = A c tiv e S h e e t. P iv o tT a b le s .A d d ( _ P ivo tC a ch e : =PTCache, _

T a b le D e s tin a tio n : =Range( "A 3" ))

Глава 17. Работа со сводными таблицами

541

1 Определение полей

 

W ith РТ

 

. P iv o tF ie ld s ( " Р е гио н") . O rie n ta tio n

= x lP a g e F ie ld

. P iv o tF ie ld s ( "М есяц") . O rie n ta tio n =

x lC o lu m n F ie ld

. P iv o tF ie ld s ( "П редставитель") .O r ie n ta tio n = x lR o w F ie ld

. P iv o tF ie ld s ( "Продажи") .O r ie n ta tio n

= x lD a ta F ie ld

' заголовки полей отсутствую т

 

. D is p la y F ie ld C a p tio n s = F alse

 

End W ith

 

End Sub

 

В данном случае была упрощена процедура C re a te P iv o tT a b le (что облегчило ее понимание) благодаря объявлению двух объектных переменных: PTCache и РТ. Новый объект P iv o tC a c h e был создан с помощью метода C re a te . Также был добавлен рабо­ чий лист, который стал активным (на этом листе размещается сводная таблица). Затем был создан объект P iv o tT a b le с помощью метода Add из коллекции P iv o tT a b le s . Последняя секция кода добавляет поля в сводную таблицу, а также указывает их поло­ жение в таблице путем присвоения значения свойству O r ie n t a t io n .

Обратите внимание, что исходный макрос жестко связан с диапазоном данных, на ос­ нове которого создается объект P iv o tC a c h e ( 1Л и с т 1 !R 1C1:R13C4 '), и местополо­ жением сводной таблицы (Л ист2). В процедуре C r e a te P iv o tT a b le сводная таблица основана на текущем диапазоне, окружающем ячейку А1. Это гарантирует, что макрос будет выполняться даже тогда, когда в диапазон добавлены дополнительные данные.

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

Совместимость сводны х таблиц

Если планируется организовать общий доступ к рабочим книгам, включающим свод­ ные таблицы, со стороны пользователей предыдущих версий Excel, уделите особое вни­ маниевопросам совместимости. Во время просмотра кода записанного макроса (читайте раздел “Создание сводной таблицы”) нетрудно заметить следующую инструкцию:

D efau ltV e rsion : = x lP iv o tT a b le V e rs io n l4

Если рабочая книга находится в режиме совместимости, на ее месте будет такая ин­ струкция:

D efau ltV e rsion : = x lP iv o tT a b le V e rs io n lO

Также вы отметите различия в коде записанного макроса, причина которых заклю­ чается в изменениях сводных таблиц, начиная с версии Excel 2007.

Предположим, что в среде Excel 2010 создана рабочая книга, которая была переда­ на пользователям Excel 2003. Они увидят таблицу, но не смогут ее обновить. Другими словами, они получат в свое распоряжение статическую таблицу, включающую ряд чи­ словых показателей.

Для обеспечения обратной совместимости сводных таблиц в Excel 2010 следует сначаласохранять файлы в формате X L S , а затем повторно их открывать. В этом случае обеспечивается работоспособность сводных таблиц при открытии содержащих их до­ кументов в версиях, предшествующих Excel 2007. Но в этом случае вы не сможете вос­ пользоваться новыми свойствами сводных таблиц, которые появились в версиях Excel 2007 и Excel 2010.