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