Добрый день Вопрос вот в чем: В сводную каждый час пишутся данные с кучи приборов на предприятии. Структура сводной: каждая строчка соответствует какому-либо прибору. В строке данные за каждый час, в конце суток сумма за сутки и среднее за сутки, в конце месяца, квартала или года такие же данные соответственно за месяц, квартал, год. Необходимо среднее за прошедшие сутки экспортировать, желательно в другой файл, но пойдет и на соседний лист. К исходным данным доступа нет Прошу прощения за сумбур, не силен в терминологии и не сталкивался со сводными пока они не появились у нас на предприятии. Пример к сожалению дать не могу, нахожусь на работе. Через несколько дней попытаюсь дома сделать что-нибудь похожее, но маленькое. Заранее благодарен всем откликнувшимся.
неужели никто не знает ... и далее смотрим название темы где жирненьким шрифтом написано: "как организовать экспорт из сводной средствами ВБА" Я понимаю что тут очень много жутко занятых и страшно ироничных людей, сам такой же, но, перечитывая свой малость сумбурный первый пост и принимая во внимание название темы, снова и снова убеждаюсь, что проблема описана доступным для понимания языком и, по сути, умещается в те самые 7 слов из названия темы. Мне совсем не верится, что мой пример даст толчок для понимания проблемы. Ведь, на самом деле, ни структура сводной, ни данные которые в ней содержатся ничего не меняют. Тем не менее, побывав на многих форумах, предвидел тучу вопросов одного и того же типа - "А где же пример?", от всё одного и того же для всех форумов типа людей и, дабы исключить не нужную писанину в теме, заранее написал, что пример будет позже. Последующее же моё сообщение не содержит никакой смысловой нагрузки и предназначено для, так называемого, АПа темы. Тем не менее, спасибо за внимание к теме. Если пример всё же важен, то постараюсь дома выложить и до этого времени не поднимать зря тему. Всем прекрасного воскресного вечера, друзья!
П.С. Зэт, спасибо за ссылку, но я не собираюсь платить за это. В конце концов, рано или поздно, когда-нибудь может быть, приедет та же подрядная организация и переделает всё сама. Я впервые столкнулся со сводной таблицей, мне она понравилась, я захотел в ней разобраться. Вот и всё
Ну напишут Вам сейчас макрос, так Вы скажете, например, - а у меня данные не в тех столбцах, и результат нужно выводить не сюда, или ещё что-то не так. И придётся ведь переделывать... Поэтому лучше Ваш небольшой файл-пример и желаемый результат.
Цитата
Я понимаю что тут очень много жутко занятых и страшно ироничных людей
Между прочим, эти жутко занятые и ироничные, оказали помощь очень большому количеству людей, которые ценят время помогающих.
Вы сначала сообщили, что покажете пример, потом появилось сообщение, но без примера. И все иронично настроенные должны были сразу догадаться, что это просто "up"? По поводу примера: Вы всерьез полагаете, что ответ для Вас нужно показывать в файле помогающего? Ведь не всегда можно написать код без хоть каких-то данных на листе. Вы в правила форума заглядывали перед тем, как создать тему?
Если пример всё же важен, то постараюсь дома выложить ...
Какая самоотверженность! Да не утруждайте себя, ради Бога. Поберегите себя для потомков. Ща я мухой и пример за Вас сварганю и решение в нем приложу. И счастливый, буду надеяться, что угодил Вам. И данные такие же, и расположены так же и попадут туда, куда надо и в нужном виде.
Ваши претензии ясны. Спасибо. Юрий, макрос записать я сам попробовал первым делом. Естественно его придется переделывать. Дело в том, и вы это я уверен прекрасно понимаете, что записаный макрос при экспорте не обращается к сводной как то по особенному, а ведет себя с ней как с обычной кучей ячеек. Если мне напишут макрос который будет обращаться к таблице по названию строки и названию столбца в сводной, то этого мне будет достаточно. Я не жду готового решения, мне интересно понять. Такой макрос продвинет меня на пути понимания обращения со сводными таблицами. Ну а на счёт жутко занятых и страшно ироничных могу сказать что сразу написал что и сам такой же. И кстати сам помог многим людям, правда на форумах по видеосъемке и обработке видео. :P vikttur, ок. ваши претензии тоже ясны и обоснованы. спасибо за внимание к теме. постараюсь исправиться и как можно быстрее выложить пример. В правила заглядывал но очень давно В дальнейшем всех желающих меня попинать приглашаю в личку дабы тема не превратилась в пустой трёп.
Ну и еще раз всем хорошего настроения!
ПС KuklP, ваш сарказм и ваш тон совсем не уместен и продиктован возможно плохим настроением. Нигде в моем тексте я не требую ни от кого, а тем более лично от вас, того о чём вы пишите. Сбавьте обороты.
Изменено: VideoAlex - 10.11.2013 15:28:53(пока писал появилось еще одно сообщение)
Данные в таблице только за одни сутки будут или надо выбирать за последние? И обязательно ли нужна сводная, что бы потом из неё выбирать? Уверен, что можно сделать просто формулами. Я бы для такого написал свою ЮДФ. Или даже макросом. (недолюбливаю сводные и формулы)
Дело в том что сводная уже есть, а к исходным данным доступа нет. Данные... ну к примеру надо смотреть в ячейку где написана дата, данные за которую надо экспортировать. Данные в сводной каждый час добавляются.
получить данные сводной таблицы работает только в том случае если фильтр развернут. надо тогда его как-то программно разворачивать. сводных у меня в документе по две штучки на листе. листов около 30-ти. в каждой сводной от 10 до 30 строк. данные добавляются каждый час. с ужасом представляю себе сколько данных будет через год. более 10-ти миллионов значений.
макрорекордер пишет, но обращается к ячейке, как к обычной ячейке, а не как к части таблицы. через час это будет уже другая ячейка. кроме того получить.данные.сводной.таблицы не тащит данные из полей промежуточных итогов фильтра (необходимое мне среднее за день) поэтому придётся собирать все значения за день и высчитывать среднее самому.
ясно. не понял. макрорекордером проще снять фильтр через срез таблицы. надеюсь понятно выразился. фильтруется только нужный день. затем перебором по области искать столбец со средними и от него плясать. Пока так вижу решение. но геморно выходит. Там подводных камней тьма помоему.
макрорекордер накатал гигантский код просто на фильтрацию нужного дня. 365 дней по очереди false и один true. Интересно можно ли одной строчкой всё в false а потом другой строчкой нужный день true. )))
Sub SSC()
Set sl = ActiveWorkbook.SlicerCaches("Срез_Время")
For i = 1 To sl.SlicerItems.Count
sl.SlicerItems(i).Selected = False
Next
sl.SlicerItems("23").Selected = True
End Sub
вот такой код частично подсмотреный в соседней темке работать не хочет. выделяет то что надо плюс всё от начала до того что выделено было. Проверено на срезе "Время"
Sub SSC()
Set sl = ActiveWorkbook.SlicerCaches("Срез_Время")
For i = 1 To sl.SlicerItems.Count
sl.SlicerItems(i).Selected = sl.SlicerItems(i)="23"
Next
End Sub
ошибка тут - sl.SlicerItems(i).Selected = sl.SlicerItems(i) = "23" думаю что сразу видно что работать не будет. SlicerItems(i) может быть или true или false, а никак не "23"
странно sl.SlicerItems(i).Selected = false не сбрасывает фильтр. то есть не работает вобще. по крайней мере визуально не заметно. НО sl.SlicerItems(i).Selected = True прекрасно работает. фильтр на нужное время ставит. проблема в том что он добавляется к уже существующему
VideoAlex пишет: ошибка тут - sl.SlicerItems(i).Selected = sl.SlicerItems(i) = "23"
Да, надо было явно прописать sl.SlicerItems(i).value=23 у должно обязательно прописываться свойство. Т.е надо было так:
Код
Sub SSC()
Dim i
With ActiveWorkbook.SlicerCaches("Срез_Время")
.SlicerItems("23").Selected = True
For i = 1 To .SlicerItems.Count
.SlicerItems(i).Selected = .SlicerItems(i).Value = "23"
Next
End With
End Sub
Цитата
VideoAlex пишет: странно sl.SlicerItems(i).Selected = false не сбрасывает фильтр. то есть не работает вобще. по крайней мере визуально не заметно. НО sl.SlicerItems(i).Selected = True прекрасно работает.
Сначала нужно установить то, что должно быть True(хотя бы один), а уже потом можно ставить в False остальное. Все False в ходе выполнения макроса быть не могут.
Михаил С., спасибо огромное за внимание к теме. Попробовал Ваш код. Всё работает, но я пока не понимаю как. Честно говоря, я даже не подозревал что в коде может быть строчка с двумя знаками равенства (присвоения) Будет ли .SlicerItems(i).Selected = .SlicerItems(i).Value = "3" равносильно .SlicerItems(i).Selected = "3" .SlicerItems(i).Value = "3" ??
.SlicerItems(i).Selected может быть только True или False; .SlicerItems(i).Value = "3" будет True, если равно 3, во всех других случаях = False, а запись .SlicerItems(i).Selected = .SlicerItems(i).Value = "3" равносильна .SlicerItems(i).Selected = (.SlicerItems(i).Value = "3" ) - так, надеюсь, понятно.
Спасибо огромное. Всё понятно, всё работает. с фильтром вроде всё ясно. остаётся поиск нужного столбца и собственно экспорт. буду копать Кстати, срез вроде можно связать со всеми сводными в документе, правильно?