Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Сводные. Классические. Как узнать, какие поля исходной таблицы участвуют в строках сводной, Макрос оптимального форматирования "уровней" (строк) сводной таблицы
 
Доброго времени суток, Планетяне!

Вопрос: как быстрее/лучше/оптимальнее всего узнать, какие поля исходной плоской таблицы участвуют в строках сводной на её основе?

Зачем: сначала написал макрос по созданию стиля сводной, но он рассчитан только на 3 подзаголовка строки, а также весьма ограничен по форматированию.

Подробности: Сейчас использую выделение (PivotSelect). Удобно, т.к. всё-равно "красить". но неудобно для предварительного анализа (+ это метод не работает с "ручным"/ManualUpdate обновлением сводной, что может значительно увеличить общее время работы макроса). То есть настроено 5 уровней "раскрашивания"/форматирования. Всё, что более 5ти - без форматирования (это понятно), но, если уровней, например, всего 3, то хотелось бы 2 красить, а третий не трогать — иначе говоря, перед выделением хотелось бы "посчитать" количество уровней (N), чтобы потом N-1 (но не более 5ти) передать в раскрашивание.

В примере всё должно быть понятнее, чем на словах. Ссылки на матчасть присутствуют.
И, как всегда, замечания и улучшения по коду только приветствуются  ;)
КОД

Метод PivotSelect
Работа со свойствами сводной
Изменено: Jack Famous - 11 Сен 2018 11:01:02
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
up
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Абсолютно не по теме. Ваш код можно оптимизировать вот эту часть
Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, как?
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Освобожусь попробую сделать.
"Все гениальное просто, а все простое гениально!!!"
 
на вскидку.

Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, ну да — интересно "запихнули" одинаковые операции - спасибо за урок))
код "похудел", но выигрыша в скорости, думаю, не будет. Да и не очень удобно массив использовать, т.к. в оригинале константы являются публичными, лежат в надстройке и используются в нескольких макросах.
А как способ и идея - отлично!  :idea: по основному вопросу есть идеи?
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
по основному вопросу есть идеи
По основному к сожалению нет  :( . Excel в работе не использую поэтому со сводными не работаю.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Jack Famous написал:
но выигрыша в скорости, думаю, не будет
дело не в выигрыше в данном случае, а в компактности кода. Изменения можно вообще вынести в отдельную процедуру.
а массив заполнить внутри основной (или если использовать отделную то в ней) процедуры константами. Что то типа
Код
arr=Array(pt_lvl_1,pt_lvl_2,pt_lvl_3,pt_lvl_4,pt_lvl_5)
Изменено: Nordheim - 12 Сен 2018 13:36:42
"Все гениальное просто, а все простое гениально!!!"
 
Создание сводных таблиц с помощью макросов
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
Nordheim: дело не в выигрыше в данном случае, а в компактности кода
ну я, собственно, это и написал вот тут:
Цитата
Jack Famous: код "похудел", но выигрыша в скорости, думаю, не будет
:)
Цитата
Nordheim: Изменения можно вообще вынести в отдельную процедуру
именно это я и предполагал в качестве первого витка оптимизации как раз по этому циклу  ;)
Цитата
Nordheim: массив заполнить константами
а вот такого я ещё не делал (ещё интересен цикл по переменным) , спасибо!  :idea:

TheBestOfTheBest, а вы уверены, что в этом часовом практикуме есть ответ на мой вопрос?
Хотелось бы всё-таки часть кода, т.к. создавать сводные кодом я не планирую…
Изменено: Jack Famous - 12 Сен 2018 13:51:05
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
а вот такого я ещё не делал
так переменная это некое значение которое можно добавлять в массив.
Цитата
Jack Famous написал:
ещё интересен цикл по переменным
а вот это навряд ли возможно, либо моих знаний не хватает.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, спасибо вам! Я понял по поводу наполнения массива, а цикл - уже совсем другая история (тема)  :)
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Привет, Алексей.
Не вдаваясь в подробность раскраски, собственно по вопросу темы, можно перебрать таким образом
Код
Public Sub scanPivotRow()
    Dim pSheet As Worksheet
    Dim pPivot As PivotTable
    Dim pRows As PivotFields
    Dim nextRow As PivotField
    Dim visibleCollection As PivotItems
    Dim nextItem As PivotItem
    Dim repeatTabs As String
    Set pSheet = ActiveSheet
    Set pPivot = pSheet.PivotTables(1)
    Set pRows = pPivot.RowFields
    For Each nextRow In pRows
        repeatTabs = String(nextRow.Position, vbTab)
        Debug.Print repeatTabs & nextRow.Caption
        Set visibleCollection = nextRow.VisibleItems
        For Each nextItem In visibleCollection
            If nextItem.RecordCount > 0 Then Debug.Print repeatTabs & vbTab & nextItem.Caption & " == " & nextItem.LabelRange.Address
        Next
    Next
End Sub
 
Приветствую вас, Андрей!
Цитата
Андрей VG: Не вдаваясь в подробность раскраски
разумеется, это лишнее  ;)
Спасибо вам огромное! Вот это реально крутой метод! Сейчас изучу и буду активно использовать!  :D
Изменено: Jack Famous - 12 Сен 2018 14:30:40
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Более простой вариант для последующей массовой расскраски
Скрытый текст
 
Андрей VG, спасибо за готовую UDF! Изучаю)))
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
Страницы: 1
Читают тему (гостей: 1)
Наверх