Страницы: 1
RSS
Сводная таблица из нескольких источников.
 
Ребята, привет!  
Помогите, плиз!  
Необходимо сделать сводную таблицу из 2-х источников. Нашла здесь очень хороший макрос, только вот проблемка. На листах все столбцы с одинаковыми названиями, кроме столбцов с данными. На одном листе продажи, а втором - остатки. Как изменить макрос, чтоб он на сводной отображал и остатки и продажи?  
На данный момент макрос суммирует данные продаж и остатка и именует столбец "продажи".  
 
Sub Сводная_таблица()  
   Dim i As Long  
   Dim arSQL() As String  
   Dim objPivotCache As PivotCache  
   Dim objRS As Object  
   Dim ResultSheetName As String  
   Dim SheetsNames As Variant  
   
   'имя листа, куда будет выводиться результирующая сводная  
   ResultSheetName = "Сводная"  
   'массив имен листов с исходными таблицами  
   SheetsNames = Array("ВТОРИЧНЫЙ ФАКТ", "ОСТАТКИ")  
   
   'формируем кэш по таблицам с листов из SheetsNames  
   With ActiveWorkbook  
       ReDim arSQL(1 To (UBound(SheetsNames) + 1))  
       For i = LBound(SheetsNames) To UBound(SheetsNames)  
           arSQL(i + 1) = "SELECT * FROM [" & SheetsNames(i) & "$]"
       Next i  
       Set objRS = CreateObject("ADODB.Recordset")  
       objRS.Open Join$(arSQL, " UNION ALL "), _  
                  Join$(Array("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=", _  
                              .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString)  
   End With  
   
   'создаем заново лист для вывода результирующей сводной таблицы  
   On Error Resume Next  
   Application.DisplayAlerts = False  
   Worksheets(ResultSheetName).Delete  
   Set wsPivot = Worksheets.Add  
   wsPivot.Name = ResultSheetName  
   
   'выводим на этот лист сводную по сформированному кэшу  
   Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal)  
   Set objPivotCache.Recordset = objRS  
   Set objRS = Nothing  
   With wsPivot  
       objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3")  
       Set objPivotCache = Nothing  
       Range("A3").Select  
   End With  
   
End Sub
 
А м.б. проще добавить на листы недостающие столбцы? На лист Продажи - столбец Осткатки (пустой), а  на лист Остатки - столб. Продажи...
 
{quote}{login=хочу стать умной}{date=05.06.2011 03:13}{thema=Сводная таблица из нескольких источников.}{post}Ребята, привет!  
Помогите, плиз!  
Необходимо сделать сводную таблицу из 2-х источников. Нашла здесь очень хороший макрос, только вот проблемка. На листах все столбцы с одинаковыми названиями, кроме столбцов с данными. На одном листе продажи, а втором - остатки. Как изменить макрос, чтоб он на сводной отображал и остатки и продажи?  
На данный момент макрос суммирует данные продаж и остатка и именует столбец "продажи".  
 
Sub Сводная_таблица()  
   Dim i As Long  
   Dim arSQL() As String  
   Dim objPivotCache As PivotCache  
   Dim objRS As Object  
   Dim ResultSheetName As String  
   Dim SheetsNames As Variant  
   
   'имя листа, куда будет выводиться результирующая сводная  
   ResultSheetName = "Сводная"  
   'массив имен листов с исходными таблицами  
   SheetsNames = Array("ВТОРИЧНЫЙ ФАКТ", "ОСТАТКИ")  
   
   'формируем кэш по таблицам с листов из SheetsNames  
   With ActiveWorkbook  
       ReDim arSQL(1 To (UBound(SheetsNames) + 1))  
       For i = LBound(SheetsNames) To UBound(SheetsNames)  
           arSQL(i + 1) = "SELECT * FROM [" & SheetsNames(i) & "$]"
       Next i  
       Set objRS = CreateObject("ADODB.Recordset")  
       objRS.Open Join$(arSQL, " UNION ALL "), _  
                  Join$(Array("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=", _  
                              .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString)  
   End With  
   
   'создаем заново лист для вывода результирующей сводной таблицы  
   On Error Resume Next  
   Application.DisplayAlerts = False  
   Worksheets(ResultSheetName).Delete  
   Set wsPivot = Worksheets.Add  
   wsPivot.Name = ResultSheetName  
   
   'выводим на этот лист сводную по сформированному кэшу  
   Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal)  
   Set objPivotCache.Recordset = objRS  
   Set objRS = Nothing  
   With wsPivot  
       objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3")  
       Set objPivotCache = Nothing  
       Range("A3").Select  
   End With  
   
End Sub{/post}{/quote}  
 
 
Хочу уточнить задачу! А то опосаюсь что могла не совсем доходчиво объяснить в предыдущем сообщении.  
У меня файл с 2-мя листами: продажи, остатки. Наименование столбцов одинаково: год, месяц, клиент, наименование товара. А вот по одному столбцу наименование расходиться. На листе продажи столбец называется продажи, на листе остатки - остатки. Мне надо сформировать сводную таблицу для анализа данных. Пробывала через "мастер сводных таблиц" - "в нескольких диапазонных конолидациях". Но с данными в каком виде они получаюся не совсем удобно работать. Вот тем макросом, кот . я указала выше  - замечательно. Получается полноценная сводная. Сама в макросах не разбираюсь. Подскажите, возможно изменить этот макрос, чтоб он собирал столбцы "Продажи" и "Остаток" отдельно, не суммируюя данные.
 
{quote}{login=гость}{date=05.06.2011 05:25}{thema=}{post}А м.б. проще добавить на листы недостающие столбцы? На лист Продажи - столбец Осткатки (пустой), а  на лист Остатки - столб. Продажи...{/post}{/quote}  
это не проще, т.к. у меня только наименование столбцов одинаково, а данные идут в разном порядке: клиенты, наименование товара, месяц...    
Если б это было возможно, я бы до этого додумалась до того как писать сюда!
 
Оджнако - "Если б это было возможно, я бы до этого додумалась до того как писать сюда!"  
Если хочу стать умной очень хочет стать умной, то стать умной без действительного желания стать умной нельзя... Почему? К примеру, не прислушивается с советам как стать умной... Вставить поле - а нафига, я сама додумаюсь... если возможно...  
-46006-
 
{quote}{login=хочу стать умной}{date=05.06.2011 05:47}{thema=Re: }{post}{quote}{login=гость}{date=05.06.2011 05:25}{thema=}{post}А м.б. проще добавить на листы недостающие столбцы? На лист Продажи - столбец Осткатки (пустой), а  на лист Остатки - столб. Продажи...{/post}{/quote}  
это не проще, т.к. у меня только наименование столбцов одинаково, а данные идут в разном порядке: клиенты, наименование товара, месяц...    
Если б это было возможно, я бы до этого додумалась до того как писать сюда!{/post}{/quote}  
Ключевое слово было "пустые" столбцы. Нет ничего проще, чам озаглавить еще один столбец недостающим словом. Это нужно для сводной, а не для того, чтобы туда данные вносить. Не додумались до того, как писать сюда, додумайтесь после.
 
{quote}{login=Z}{date=05.06.2011 06:29}{thema=}{post}Оджнако - "Если б это было возможно, я бы до этого додумалась до того как писать сюда!"  
Если хочу стать умной очень хочет стать умной, то стать умной без действительного желания стать умной нельзя... Почему? К примеру, не прислушивается с советам как стать умной... Вставить поле - а нафига, я сама додумаюсь... если возможно...  
-46006-{/post}{/quote}  
ээээ... спасибо, Z! Не услышала одного, м.б., услышит двоих? :)
 
хочу стать умной, можете мне объяснить - с какой целью Вы процитировали во втором сообщении своё первое сообщение? Зачем? При создании сообщения можно воспользоваться кнопочкой-ссылкой "ответить". Что даёт в данном случае Ваше цитирование?  
P.S. Подумайте над сменой ника - ведь неудобно к Вам ТАК обращаться. А эти три слова можете переместить в подпись - ребрендинг с преемственностью :-)
 
{quote}{login=}{date=05.06.2011 07:21}{thema=Re: Re: }{post}{quote}{login=хочу стать умной}{date=05.06.2011 05:47}{thema=Re: }{post}{quote}{login=гость}{date=05.06.2011 05:25}{thema=}{post}А м.б. проще добавить на листы недостающие столбцы? На лист Продажи - столбец Осткатки (пустой), а  на лист Остатки - столб. Продажи...{/post}{/quote}  
это не проще, т.к. у меня только наименование столбцов одинаково, а данные идут в разном порядке: клиенты, наименование товара, месяц...    
Если б это было возможно, я бы до этого додумалась до того как писать сюда!{/post}{/quote}  
Ключевое слово было "пустые" столбцы. Нет ничего проще, чам озаглавить еще один столбец недостающим словом. Это нужно для сводной, а не для того, чтобы туда данные вносить. Не додумались до того, как писать сюда, додумайтесь после.{/post}{/quote}  
Я согласна "Нет ничего проще, чам озаглавить еще один столбец недостающим словом". Но только в этом отчете расхождение по одному столбцу. Но есть отчеты в которых их более 5ти. Так я бы хотела найти решение и автоматизировать весь процесс. А не добавлять каждый раз недостающие столбцы. В этом как раз может помочь макрос.
 
Добрый день! Проблема в следующем: имеется 4-5 листов, на которых есть таблицы, связанные между собой только уникальным кодом клиента. Код клиента периодически повторяется, соответственно впр тут неприменим. необходимо сделать с помощью макроса сводную таблицу по уникальному коду, в котором будут проставляться необходимые поля из разных таблиц. пример прилагаю.  
 
Заранее всем большое спасибо!  
 
 
К сообщению прикреплен файл: post_314170.xlsx
Страницы: 1
Наверх