Привет всем. Есть задача надо подсчитать обеды сотрудников за месяц, которые выгружаются из БД в Эксель файл. Надо что бы получилось на новом листе Имя и сумма обедов за месяц. Эксель может быть как на английском так и на русском.
Заранее спасибо.
Привет всем. Есть задача надо подсчитать обеды сотрудников за месяц, которые выгружаются из БД в Эксель файл. Надо что бы получилось на новом листе Имя и сумма обедов за месяц. Эксель может быть как на английском так и на русском.
Начиная с какой-то версии Excel'я, была убрана кнопка для создания сводной из нескольких листов, но такая возможность осталась, нужно найти кнопку. Я это описывать не буду. Предлагаю вариант с помощью макроса, который сделает сводную из нескольких листов. Условия для работы макроса: 1) в файле не должно быть лишних листов, должны быть листы, на которых будет строиться сводная 2) структура таблиц на всех листах должна быть одинаковой
Помимо сводного листа, макрос создает лист, на котором будут данные из всех листов. На основе этого листа макрос строит сводную.
[vba]
Код
Sub Сводная_с_нескольких_листов()
Dim shRes As Worksheet, shSvod As Worksheet, sh As Worksheet, PivTable As PivotTable Dim lr As Long, i As Long
Application.ScreenUpdating = False
Set shRes = Worksheets.Add(After:=Worksheets(Worksheets.Count)) For i = 1 To Worksheets.Count - 1 Set sh = Worksheets(i) If i = 1 Then sh.usedrange.Copy shRes.Range("A1").PasteSpecial xlPasteAll shRes.Range("A1").PasteSpecial xlPasteColumnWidths Else lr = shRes.usedrange.Rows.Count + 1 sh.usedrange.Offset(1).Copy shRes.Cells(lr, "A").PasteSpecial xlPasteAll shRes.Cells(lr, "A").PasteSpecial xlPasteColumnWidths End If Next i shRes.Columns.WrapText = False
Set shSvod = Worksheets.Add(After:=shRes) ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=shRes.usedrange.Address(ReferenceStyle:=xlR1C1, External:=True), _ Version:=6).CreatePivotTable _ TableDestination:=shSvod.Range("A3").Address(ReferenceStyle:=xlR1C1, External:=True), _ DefaultVersion:=6 Set PivTable = shSvod.PivotTables(1) With PivTable.PivotFields("customers.NAME") .Orientation = xlRowField .Position = 1 End With PivTable.AddDataField PivTable.PivotFields("PRICE"), "Сумма по полю PRICE", xlSum
Application.ScreenUpdating = True
End Sub
[/vba]
Начиная с какой-то версии Excel'я, была убрана кнопка для создания сводной из нескольких листов, но такая возможность осталась, нужно найти кнопку. Я это описывать не буду. Предлагаю вариант с помощью макроса, который сделает сводную из нескольких листов. Условия для работы макроса: 1) в файле не должно быть лишних листов, должны быть листы, на которых будет строиться сводная 2) структура таблиц на всех листах должна быть одинаковой
Помимо сводного листа, макрос создает лист, на котором будут данные из всех листов. На основе этого листа макрос строит сводную.
[vba]
Код
Sub Сводная_с_нескольких_листов()
Dim shRes As Worksheet, shSvod As Worksheet, sh As Worksheet, PivTable As PivotTable Dim lr As Long, i As Long
Application.ScreenUpdating = False
Set shRes = Worksheets.Add(After:=Worksheets(Worksheets.Count)) For i = 1 To Worksheets.Count - 1 Set sh = Worksheets(i) If i = 1 Then sh.usedrange.Copy shRes.Range("A1").PasteSpecial xlPasteAll shRes.Range("A1").PasteSpecial xlPasteColumnWidths Else lr = shRes.usedrange.Rows.Count + 1 sh.usedrange.Offset(1).Copy shRes.Cells(lr, "A").PasteSpecial xlPasteAll shRes.Cells(lr, "A").PasteSpecial xlPasteColumnWidths End If Next i shRes.Columns.WrapText = False
Set shSvod = Worksheets.Add(After:=shRes) ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:=shRes.usedrange.Address(ReferenceStyle:=xlR1C1, External:=True), _ Version:=6).CreatePivotTable _ TableDestination:=shSvod.Range("A3").Address(ReferenceStyle:=xlR1C1, External:=True), _ DefaultVersion:=6 Set PivTable = shSvod.PivotTables(1) With PivTable.PivotFields("customers.NAME") .Orientation = xlRowField .Position = 1 End With PivTable.AddDataField PivTable.PivotFields("PRICE"), "Сумма по полю PRICE", xlSum
Начиная с какой-то версии Excel'я, была убрана кнопка для создания сводной из нескольких листов, но такая возможность осталась, нужно найти кнопку. Я это описывать не буду. Предлагаю вариант с помощью макроса, который сделает сводную из нескольких листов. Условия для работы макроса: 1) в файле не должно быть лишних листов, должны быть листы, на которых будет строиться сводная 2) структура таблиц на всех листах должна быть одинаковой
Помимо сводного листа, макрос создает лист, на котором будут данные из всех листов. На основе этого листа макрос строит сводную.
Как найти кнопку я знаю, как построить сводный запрос с 2х листов не могу сделать. Ваш вариант с макросом прекрасен, только я знаю куда этот макрос вставить и заставить работать. Я не эксперт в области Экселя.
А вот прошлый вариант мне более понятен. И его можено использовать в дальнейшем когда будет следующий месяц.
Начиная с какой-то версии Excel'я, была убрана кнопка для создания сводной из нескольких листов, но такая возможность осталась, нужно найти кнопку. Я это описывать не буду. Предлагаю вариант с помощью макроса, который сделает сводную из нескольких листов. Условия для работы макроса: 1) в файле не должно быть лишних листов, должны быть листы, на которых будет строиться сводная 2) структура таблиц на всех листах должна быть одинаковой
Помимо сводного листа, макрос создает лист, на котором будут данные из всех листов. На основе этого листа макрос строит сводную.
Как найти кнопку я знаю, как построить сводный запрос с 2х листов не могу сделать. Ваш вариант с макросом прекрасен, только я знаю куда этот макрос вставить и заставить работать. Я не эксперт в области Экселя.
А вот прошлый вариант мне более понятен. И его можено использовать в дальнейшем когда будет следующий месяц.Mordor
Если не знаете, как запускать макросы, то попробуйте сначала поискать в гугле, яндексе. Если не найдете, то задайте вопрос на форуме.
PS. Не цитируйте посты целиком. Чтобы ответить, не нужно щелкать кнопку "Цитата", а достаточно прокрутить страницу вниз и там будет поле для написания поста. Если хотите к кому-то обратиться, то просто напишите ник.
Mordor, мне кажется, что у Вас здесь пропущено "не":
Если не знаете, как запускать макросы, то попробуйте сначала поискать в гугле, яндексе. Если не найдете, то задайте вопрос на форуме.
PS. Не цитируйте посты целиком. Чтобы ответить, не нужно щелкать кнопку "Цитата", а достаточно прокрутить страницу вниз и там будет поле для написания поста. Если хотите к кому-то обратиться, то просто напишите ник.Karataev
Уважаемый, Karataev у меня попутно еще несколько задач идет и нет времени искать в гугле как запустить макрос. Если хотите помочь предлагайте решение, а не посылате человека просящего помощь у специалиста, в гугл, это как минимум не профессионально.
Спасибо за макрос, разобрался все работает. Делает подсчет по нескольким листам сразу и выгружает отдельным листом с суммой.
Уважаемый, Karataev у меня попутно еще несколько задач идет и нет времени искать в гугле как запустить макрос. Если хотите помочь предлагайте решение, а не посылате человека просящего помощь у специалиста, в гугл, это как минимум не профессионально.
Спасибо за макрос, разобрался все работает. Делает подсчет по нескольким листам сразу и выгружает отдельным листом с суммой.Mordor
Mordor, я не стал в этой теме рассказывать, как запускать макрос, т.к. эта тема о другом. Но Вам никто не запрещает создать новую тему и в ней спросить, как запускать макрос. Только сначала поищите на форуме такую же тему (об этом сказано в правилах).
Mordor, я не стал в этой теме рассказывать, как запускать макрос, т.к. эта тема о другом. Но Вам никто не запрещает создать новую тему и в ней спросить, как запускать макрос. Только сначала поищите на форуме такую же тему (об этом сказано в правилах).Karataev
Каратаев у вас макрос отлично считает единственное можно вас попросить пункты Не сожержащие в названии надпись staff считать с вычетом 50%, а так же учитавать пункт оплачено и так же не плюсовать эти позиции.
Заранее спасибо.
Каратаев у вас макрос отлично считает единственное можно вас попросить пункты Не сожержащие в названии надпись staff считать с вычетом 50%, а так же учитавать пункт оплачено и так же не плюсовать эти позиции.
отличное решение я вставил данные в таблицу обновил все данные, и вроде в поле итого посчиталось а что там делается в странице 9? там я так понимаю считается все полностью? Подскажите почему на странице 9 человек получается больше чем на странице итого? Спасибо БМВ98рус
отличное решение я вставил данные в таблицу обновил все данные, и вроде в поле итого посчиталось а что там делается в странице 9? там я так понимаю считается все полностью? Подскажите почему на странице 9 человек получается больше чем на странице итого? Спасибо БМВ98русMordor
пункты Не сожержащие в названии надпись staff считать с вычетом 50%
Макрос составляет сводную для столбца "PRICE". Если в столбце "E" (products.NAME) нет слова " Staff " (с пробелами), то нужно уменьшить число в столбце "PRICE" на 50%?
а так же учитавать пункт оплачено и так же не плюсовать эти позиции.
Макрос вообще не работает со столбцом "Оплачено", и в сводной не участвует этот столбец. Макросу надо смотреть, что находится в столбце "Оплачено" и что делать со столбцом "PRICE"? Или чтобы строка не участвовала в сводной?
пункты Не сожержащие в названии надпись staff считать с вычетом 50%
Макрос составляет сводную для столбца "PRICE". Если в столбце "E" (products.NAME) нет слова " Staff " (с пробелами), то нужно уменьшить число в столбце "PRICE" на 50%?
а так же учитавать пункт оплачено и так же не плюсовать эти позиции.
Макрос вообще не работает со столбцом "Оплачено", и в сводной не участвует этот столбец. Макросу надо смотреть, что находится в столбце "Оплачено" и что делать со столбцом "PRICE"? Или чтобы строка не участвовала в сводной?Karataev
БМВ98рус посмотрел но я мало что понимаю, сравнил с прошлой вашей версией суммы одинаковые, что я должен увидеть по запросам? и где посмотреть изменения. и еще у меня вопрос почему количество людей меняется в итоговой странице, когда на странице где объединяется 2 листа их там больше.
БМВ98рус посмотрел но я мало что понимаю, сравнил с прошлой вашей версией суммы одинаковые, что я должен увидеть по запросам? и где посмотреть изменения. и еще у меня вопрос почему количество людей меняется в итоговой странице, когда на странице где объединяется 2 листа их там больше.Mordor
Сообщение отредактировал Mordor - Среда, 17.01.2018, 10:19