VBA: группировка сводной таблицы по (месяц, день, час, минута)

Я пытаюсь написать код, который может группировать столбец меток времени на основе (месяц, день, час, минута). Код, который я использую,

PTable.RowAxisLayout xlTabularRow
    Set PField = PTable.PivotFields("Date")
    With ActiveSheet.PivotTables("BigDataPivotTable").PivotFields("Time Stamp")
        .Orientation = xlRowField
        .Group Start:=True, End:=True, Periods:=Array(False, True, True, _
        True, True, False, False)
        .Position = 1 
    End With

но это не дает мне то, что я ищу

Ниже приведена сводная таблица

введите здесь описание изображения

и я хочу, чтобы это выглядело так

введите здесь описание изображения

Ваша помощь приветствуется,

Спасибо,


person Hassen    schedule 05.02.2018    source источник
comment
Распознает ли Excel даты как таковые или обрабатывает их как текст? Вы можете узнать, есть ли в сгенерированном сводном параметре расширенный фильтр даты для фильтрации в поле потенциальные даты.   -  person Mathieu Guindon    schedule 05.02.2018
comment
Какой код выплевывает макрорекордер, если делать это вручную во время записи макроса?   -  person jeffreyweir    schedule 06.02.2018
comment
@Mat'sMug распознает время, но не группирует   -  person Hassen    schedule 06.02.2018


Ответы (2)


Попробуйте что-то вроде этого:

Range("A4").Select
Selection.Group Start:=True, End:=True, Periods:=Array(True, True, True, _
        True, True, False, False)
person Matt Mignone    schedule 07.03.2018

Метод Group работает с диапазоном, а не со сводным полем. Вот почему ответ Мэтта с использованием «Выбрать» работает. Но что, если вы не хотите использовать select? Я лично избегаю изменения выбора, насколько это возможно. Оставьте выбор пользователю и позвольте VBA использовать диапазоны.

В этом случае нам нужно найти диапазон, который мы хотим сгруппировать:

   With ActiveSheet.PivotTables("BigDataPivotTable").PivotFields("Time Stamp")
        .LabelRange.Cells(1,2).Group Start:=True, End:=True, Periods:=Array(False, True, True, _
        True, True, False, False)
        .Position = 1 
   End With

Ключ здесь находится в .LabelRange.Cells(1,2). Это находит первую ячейку, которая содержит фактические данные в этом поле, и это то, что мы группируем. Если мы попытаемся сгруппировать только .LabelRange, мы получим ошибку, потому что это просто метка поля, а не данные. Обратите внимание, что нам не нужно выбирать весь диапазон данных для поля, а только ячейку в поле, содержащую данные.

person Carlos N    schedule 05.05.2020