Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Логика построения макроса с созданием листов из списка - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Логика построения макроса с созданием листов из списка
Restoris Дата: Пятница, 19.01.2018, 06:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте,
Есть исходный файл в Excel. В нём есть лист «DATA», где расположены данные по остаткам товаров. Данные представляют собой таблицу с именованными столбцами. В таблице очень подробно выведены остатки товаров с детализацией до конкретного товара, цвета и даже размера.
Необходимо написать макрос в Excel, который бы обработал эту исходную таблицу, и на её основе сделал соответствующее количество листов по каждой марке (один лист – одна марка). На листе «ARMANI test» пример отчёта по марке Armani. Пример сделан с помощью сводных таблиц Excel.
Правильная моя логика из массива данных создать сводную таблицу со списком из которого создать листы и вытянуть данные по критерию (Название марки)

Сложность в создании первоначальной сводной (жалуется на PivotCaches) в чем я ошибся?
Работаю на Маке и походу у него стандартная проблема с PivotCaches
Кто еще в курсе этой проблемы? И что с этим делать и как мне можно решить поставленную задачу?

[vba]
Код

Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
With ActiveSheet
.Name = " SWOD "
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid = True
.PivotFields("_brand").Orientation = xlDataField

End With
End Sub
[/vba]

Далее создаю листы

[vba]
Код
Sub Листы()
Dim cell As Range
For Each cell In ActiveSheet.Range("A4:A16")
Worksheets.Add after:=Worksheets(ActiveSheet.Index)
ActiveSheet.Name = CStr(cell.Value)
Next
End Sub
[/vba]

Как вытянуть данные по критерию еще не придумал :(

Подскажите как можно реализовать данную задачу?

[p.s.] Только начинаю познавать макросы и много еще не знаю (скорее всего не правильно прописываю команды)[/p.s.]
К сообщению приложен файл: VBA_2.xls (72.0 Kb)


Сообщение отредактировал Restoris - Пятница, 19.01.2018, 08:37
 
Ответить
СообщениеЗдравствуйте,
Есть исходный файл в Excel. В нём есть лист «DATA», где расположены данные по остаткам товаров. Данные представляют собой таблицу с именованными столбцами. В таблице очень подробно выведены остатки товаров с детализацией до конкретного товара, цвета и даже размера.
Необходимо написать макрос в Excel, который бы обработал эту исходную таблицу, и на её основе сделал соответствующее количество листов по каждой марке (один лист – одна марка). На листе «ARMANI test» пример отчёта по марке Armani. Пример сделан с помощью сводных таблиц Excel.
Правильная моя логика из массива данных создать сводную таблицу со списком из которого создать листы и вытянуть данные по критерию (Название марки)

Сложность в создании первоначальной сводной (жалуется на PivotCaches) в чем я ошибся?
Работаю на Маке и походу у него стандартная проблема с PivotCaches
Кто еще в курсе этой проблемы? И что с этим делать и как мне можно решить поставленную задачу?

[vba]
Код

Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
With ActiveSheet
.Name = " SWOD "
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid = True
.PivotFields("_brand").Orientation = xlDataField

End With
End Sub
[/vba]

Далее создаю листы

[vba]
Код
Sub Листы()
Dim cell As Range
For Each cell In ActiveSheet.Range("A4:A16")
Worksheets.Add after:=Worksheets(ActiveSheet.Index)
ActiveSheet.Name = CStr(cell.Value)
Next
End Sub
[/vba]

Как вытянуть данные по критерию еще не придумал :(

Подскажите как можно реализовать данную задачу?

[p.s.] Только начинаю познавать макросы и много еще не знаю (скорее всего не правильно прописываю команды)[/p.s.]

Автор - Restoris
Дата добавления - 19.01.2018 в 06:41
Restoris Дата: Пятница, 19.01.2018, 06:43 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Не прошел по размеру пример итогового листа
К сообщению приложен файл: VBA_3.xls (78.5 Kb)
 
Ответить
СообщениеНе прошел по размеру пример итогового листа

Автор - Restoris
Дата добавления - 19.01.2018 в 06:43
Restoris Дата: Пятница, 19.01.2018, 08:18 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Работаю на Маке и походу у него стандартная проблема с PivotCaches
Кто еще в курсе этой проблемы? И что с этим делать и как мне можно решить поставленную задачу?
 
Ответить
СообщениеРаботаю на Маке и походу у него стандартная проблема с PivotCaches
Кто еще в курсе этой проблемы? И что с этим делать и как мне можно решить поставленную задачу?

Автор - Restoris
Дата добавления - 19.01.2018 в 08:18
китин Дата: Пятница, 19.01.2018, 08:24 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 7040
Репутация: 1080 ±
Замечаний: 0% ±

Excel 2007;2010;2016
что с этим делать

прочитать правила и оформить сообщение в части тэгов


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
что с этим делать

прочитать правила и оформить сообщение в части тэгов

Автор - китин
Дата добавления - 19.01.2018 в 08:24
Restoris Дата: Пятница, 19.01.2018, 08:27 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
прочитать правила и оформить сообщение в части тэгов


Понял сделаю) простите что немного накосячил( просто мозг кипит с этой задачей)
 
Ответить
Сообщение
прочитать правила и оформить сообщение в части тэгов


Понял сделаю) простите что немного накосячил( просто мозг кипит с этой задачей)

Автор - Restoris
Дата добавления - 19.01.2018 в 08:27
Restoris Дата: Пятница, 19.01.2018, 10:32 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, прошу помощи))) хоть подскажите логику построения) как ввернуть данные уже в созданные листы)))
 
Ответить
СообщениеSLAVICK, прошу помощи))) хоть подскажите логику построения) как ввернуть данные уже в созданные листы)))

Автор - Restoris
Дата добавления - 19.01.2018 в 10:32
Pelena Дата: Пятница, 19.01.2018, 10:41 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19603
Репутация: 4660 ±
Замечаний: ±

Excel 365 & Mac Excel
Сложность в создании первоначальной сводной... Работаю на Маке

У меня на Мас'е так создаётся, версия Excel 15.41
[vba]
Код
Sub CreateTableM()
    Sheets.Add.Name = "SWOD"
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698", Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:="SWOD!R3C1", TableName:="ТаблицаМ"
    With ActiveSheet.PivotTables("ТаблицаМ")
        .SmallGrid = True
        .PivotFields("_brand").Orientation = xlDataField
    End With
End Sub
[/vba]
Дальше добавляйте нужные поля в область строк
[p.s.]Или Вас помощь только от SLAVICKа устроит?[/p.s.]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Сложность в создании первоначальной сводной... Работаю на Маке

У меня на Мас'е так создаётся, версия Excel 15.41
[vba]
Код
Sub CreateTableM()
    Sheets.Add.Name = "SWOD"
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698", Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:="SWOD!R3C1", TableName:="ТаблицаМ"
    With ActiveSheet.PivotTables("ТаблицаМ")
        .SmallGrid = True
        .PivotFields("_brand").Orientation = xlDataField
    End With
End Sub
[/vba]
Дальше добавляйте нужные поля в область строк
[p.s.]Или Вас помощь только от SLAVICKа устроит?[/p.s.]

Автор - Pelena
Дата добавления - 19.01.2018 в 10:41
Restoris Дата: Пятница, 19.01.2018, 11:03 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, устроит от всех))) и буду очень благодарен)) со сводной разобрался, спасибо) но меня теперь больше интересует как на созданные листы перенести данные из сводной таблицы на подходящий лист, вот тут у меня реальный ступор(
 
Ответить
СообщениеPelena, устроит от всех))) и буду очень благодарен)) со сводной разобрался, спасибо) но меня теперь больше интересует как на созданные листы перенести данные из сводной таблицы на подходящий лист, вот тут у меня реальный ступор(

Автор - Restoris
Дата добавления - 19.01.2018 в 11:03
Pelena Дата: Пятница, 19.01.2018, 11:25 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19603
Репутация: 4660 ±
Замечаний: ±

Excel 365 & Mac Excel
со сводной разобрался

Приложите файл с макросом, который создаёт нужную Вам сводную.


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
со сводной разобрался

Приложите файл с макросом, который создаёт нужную Вам сводную.

Автор - Pelena
Дата добавления - 19.01.2018 в 11:25
Restoris Дата: Пятница, 19.01.2018, 11:42 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, Я решил это так, потом попробую соединить в единый (файл слишком тяжеллый :( )
но все это далеко от того вида который я должен получить в итоге файл VBA 3 отправлял (Дата: Пятница, 19.01.2018, 06:43 | Сообщение № 2)
[vba]
Код
Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="TableM"
With ActiveSheet
.Name = "Сводная"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("TableM")
.SmallGrid = True
.PivotFields("_stock_pcs").Orientation = xlDataField
.PivotFields("_brand").Orientation = xlRowField
End With
End Sub

Sub Листы()
Dim cell As Range
For Each cell In ActiveSheet.Range("A5:A17")
Worksheets.Add after:=Worksheets(ActiveSheet.Index)
ActiveSheet.Name = CStr(cell.Value)
Next
End Sub

Sub Удаление()
'
' Удаление Макрос
'

Application.DisplayAlerts = False
    Sheets("Сводная").Select
    ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub

Sub CreateTableS()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="TableS"
With ActiveSheet
.Name = "Сводная"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("TableS")
.SmallGrid = True
.PivotFields("_stock_pcs").Orientation = xlDataField
.PivotFields("_brand").Orientation = xlRowField
.PivotFields("_div").Orientation = xlRowField
.PivotFields("_rus1").Orientation = xlRowField
.PivotFields("_rus2").Orientation = xlRowField
.PivotFields("_rus3").Orientation = xlRowField
.PivotFields("_rus4").Orientation = xlRowField
.PivotFields("_lastssn").Orientation = xlColumnField
End With
End Sub
[/vba]


Сообщение отредактировал Restoris - Пятница, 19.01.2018, 11:48
 
Ответить
СообщениеPelena, Я решил это так, потом попробую соединить в единый (файл слишком тяжеллый :( )
но все это далеко от того вида который я должен получить в итоге файл VBA 3 отправлял (Дата: Пятница, 19.01.2018, 06:43 | Сообщение № 2)
[vba]
Код
Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="TableM"
With ActiveSheet
.Name = "Сводная"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("TableM")
.SmallGrid = True
.PivotFields("_stock_pcs").Orientation = xlDataField
.PivotFields("_brand").Orientation = xlRowField
End With
End Sub

Sub Листы()
Dim cell As Range
For Each cell In ActiveSheet.Range("A5:A17")
Worksheets.Add after:=Worksheets(ActiveSheet.Index)
ActiveSheet.Name = CStr(cell.Value)
Next
End Sub

Sub Удаление()
'
' Удаление Макрос
'

Application.DisplayAlerts = False
    Sheets("Сводная").Select
    ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub

Sub CreateTableS()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="DATA!A1:Y4698").CreatePivotTable TableDestination:="", TableName:="TableS"
With ActiveSheet
.Name = "Сводная"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("TableS")
.SmallGrid = True
.PivotFields("_stock_pcs").Orientation = xlDataField
.PivotFields("_brand").Orientation = xlRowField
.PivotFields("_div").Orientation = xlRowField
.PivotFields("_rus1").Orientation = xlRowField
.PivotFields("_rus2").Orientation = xlRowField
.PivotFields("_rus3").Orientation = xlRowField
.PivotFields("_rus4").Orientation = xlRowField
.PivotFields("_lastssn").Orientation = xlColumnField
End With
End Sub
[/vba]

Автор - Restoris
Дата добавления - 19.01.2018 в 11:42
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!