Страницы: 1
RSS
Сводная таблица на основании данных из нескольких диапазонов
 
Здравствуйте.  
Столкнулся с такой проблемой.  
Есть несколько листов, на каждом из которых данные, организованные в виде таблицы.  
Все таблицы имеют однотипные данные.  
Необходимо сформировать сводную таблицу, исходя из этих данных.  
Во вложении пример. там уже есть сводная таблица, но она суммирует не те поля.  
Также я нарисовал таблицу в том виде, в котором нужна.  
Прошу подсказать, как это осуществить!  
Заранее благодарен.
 
Скопируйте название вашей темы в поиск и будет вам счастье.  
Вот еще: http://blog.contextures.com/archives/2009/08/24/create-a-pivot-table-from-multiple-sheets/
KL
 
К сожалению, на работе доступ на Ютуб закрыт. не могу посмотреть.  
А приложенный в посте пример что то у меня не работает. листы не трогал и свои данные не подставлял. у меня Эксель 2003  
 
Кстати, в поиске рылся... Просмотрел около 8-10 тем. после этого создал тему
 
по вашей ссылке скачал вот этот пример  
 
VBA_PT_NormalMultipleSheets EN 06.zip  
 
Это именно то что нужно!!!  
Очень вас прошу, помогите его адаптировать под мой пример.
 
См. вложение
KL
 
Спасибо вам огромное преогромное!!!!!!!!!!!!!!! Просто супер решение задачи!!!!  
Подскажите пожалуйста:  
1.Возможно ли такое создать не используя VBA?  
2. как данную таблицу из вашего примера сформировать "с нуля"???  
То есть сначала очистить лист, а потом заново создать таблицу?
 
1. Без VBA это можно сделать только если сводная будет в другом файле, но это муторно и все равно запрос SQL придется прописывать.  
 
2. Если без VBA, то это долгая история - сейчас нет времени пошагово описывать процесс.  
Если с VBA, то там есть кнопка "Create Empty Table"
KL
 
А по второму вопросу подскажите пожалуйста.  
Как мне ее с нуля сделать? то есть как мне прописать диапазоны данных (всего будет 31 лист с названиями от 1 до 31)  
И как обозначить место ее дислокации?  
Также данная таблица должна автоматически обновляться. Кнопка "Обновить данные" не активна в вашем примере.  
Я у себя добавил в код следующие строки:  
For Each PvTable In Sheets("Pivot").PivotTables  
PvTable.PivotCache.Refresh  
Next  
 
Будет ли этот код работать?
 
С кнопкой "Create Empty Table" я разобрался, а также с местом дислокации таблицы  
Теперь как добавить диапазоны данных?  
И как ее автоматически обновлять? мой пример подойдет?
 
Обновление через стандартный интерфейс для этого решения недоступно можно сделать вот так.  
 
Я в коде прописал: автоматически брать данные из всех листов, чьи названия представлены числом.
KL
 
У меня на листе будет несколько таблиц.  
Соответственно это повлияет на итог.  
как задать на каждом листе диапазон данных? (этот диапазон одинаков для каждого листа)
 
Вот в коде следующих процедур:  
   
Sub CreateConnection()  
Reconnect()  
 
измените следующую строку по желанию:  
 
'***************************************************  
strTable = "A1:C20"
KL
 
ОК. Спасибо огромное!!!!!
 
{quote}{login=KL}{date=30.01.2012 04:13}{thema=}{post}Обновление через стандартный интерфейс для этого решения недоступно можно сделать вот так.  
Я в коде прописал: автоматически брать данные из всех листов, чьи названия представлены числом.{/post}{/quote}  
Почему же не допустимо?  
Можно создать подключение в книге (для Excel начиная с 2007), по Вашему примеру  
Dim sConn As String  
dim sSql As String  
 
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Downloads\Multiconnection.xls;Extended Properties=""Excel 12.0;HDR=Yes"";"  
sSql = "SELECT * , "1" AS [Sheet] FROM [1$A1:C20] UNION ALL SELECT * , "2" AS [Sheet] FROM [2$A1:C20]"
ThisWorkbook.Connections.Add "MultiSheet", "For pivot", sConn, sSql, XlCmdType.xlCmdSql  
Set PC = ThisWorkbook.PivotCaches.Create SourceType:=xlExternal, SourceData:= ThisWorkbook.Connections("MultiSheet")  
Set PT = PC.CreatePivotTable(TableDestination:=Range("A8"))
 
{quote}{login=KL}{date=30.01.2012 09:28}{thema=}{post}Вот в коде следующих процедур:  
Sub CreateConnection()  
Reconnect()  
измените следующую строку по желанию:  
'***************************************************  
strTable = "A1:C20"{/post}{/quote}  
 
Здравствуйте KL.  
По данной теме возник еще вопрос. ваш код я успешно добавил.  
У меня будет формироваться данная таблица на основании данных всех листов.  
А у меня еще возникает потребность создать еще одну подобную таблицу, но с определенных листов.  
Например, пользователь нажимает кнопку "Создать отчет за период"  
Должна появиться форма, в которой нужно ввести диапазон дат либо конкретно каждую нужную дату, которую вносить в отчет. И в итоге формируется сводная таблица из данных, взятых с указанных листов (названия листов и есть даты).  
Вот, не могли бы вы помочь с этим вопросом?  
Заранее вам очень благодарен!
 
{quote}{login=vovik_lmz}{date=31.01.2012 12:46}{thema=}{post}Здравствуйте KL.  
По данной теме возник еще вопрос. ваш код я успешно добавил.  
У меня будет формироваться данная таблица на основании данных всех листов.  
А у меня еще возникает потребность создать еще одну подобную таблицу, но с определенных листов.  
Например, пользователь нажимает кнопку "Создать отчет за период"  
Должна появиться форма, в которой нужно ввести диапазон дат либо конкретно каждую нужную дату, которую вносить в отчет. И в итоге формируется сводная таблица из данных, взятых с указанных листов (названия листов и есть даты).  
Вот, не могли бы вы помочь с этим вопросом?  
Заранее вам очень благодарен!{/post}{/quote}  
vovik_lmz, это уже не одна задача, а несколько. Рекомендую начать самому разбираться в коде, который я вам предоставил. Для того, чтобы сделать то, что вы хотитете, нужно:  
- создать форму  
- поместить на форму листбох или 31 чекбокс с названиями листов (динамически или на постоянной основе)  
- придумать как дать пользователю возможность выбирать диапазон дат  
- при выходе из формы формировать массив выбранных листов  
- адаптировать код создания сводной для приема полученного массива  
- прописать в коде отслеживание возможных ошибок пользователя  
 
Чего не знаете - ищите существующие темы, создавайте свои и потихоньку соберете все нужное. Дерзайте!
KL
 
KL, познавать новое - это конечно же хорошо и я ЗА!  
Но данный отчет начнет работать уже завтра ((((  
Он работает. в том числе благодаря вам и некоторым другим форумчанам. за что всем большое спасибо!  
А данная сводная табличка, с выбором диапазонов дат потребуется для оплаты к середине февраля, числа к 16. не успею. но попытаюсь...
Страницы: 1
Читают тему
Наверх