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

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

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

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

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

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

Ваша помощь ценится,

Спасибо,

1 ответ

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

Range("A4").Select
Selection.Group Start:=True, End:=True, Periods:=Array(True, True, True, _
        True, True, False, False)

Метод Group работает с Range, а не с PivotField. Вот почему ответ Мэтта с использованием "Выбрать" работает. Но что, если вы не хотите использовать 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, мы получим ошибку, потому что это просто метка поля, а не данные. Обратите внимание, что нам также не нужно выбирать весь диапазон данных для поля, только ячейку в поле, которая содержит данные.

Другие вопросы по тегам