Измените формат столбца поля даты сводной таблицы, затем сортируйте поле
У меня есть сводная таблица с одним полем столбца даты. Я хочу, чтобы столбец был сгруппирован по 7 дням, а затем отображался в порядке возрастания. Проблема в том, что при группировании элементы отображаются следующим образом:
5/1/13 - 5/7/13, 5/16/13 - 5/21/13, 5/22/13 - 5/29/13, 5/8/13 - 5/15/13
Как видите, 5/8... не в том месте. Причина в том, что в этот момент поле распознается только как текст, а не как дата.
Моя попытка исправить было изменить формат даты на "мм / дд / гг" для лучшей сортировки. Так, например, дата будет выглядеть так: 05/01/13 - 05/07/13
, Но проблема заключалась в том, что когда я снова собирался в группу, дата автоматически возвращалась к тому, что было.
Есть ли способ программно сгруппировать столбцы сводной таблицы, но при этом сохранить этот формат даты, чтобы он мог сортировать по порядку?
1 ответ
Предполагалось, что это будет последнее средство, но в итоге мне пришлось создать массив дат начала в моих диапазонах дат, изменить формат даты на mm/dd/yyyy
отсортируйте его, а затем отрегулируйте положение сводных элементов на основе позиционирования индекса массива. Я сделал это, используя элементы массива в качестве ключа на карте со значением, являющимся фактическим именем сводного элемента.
Sub TryAndSort()
Dim w As Worksheet, p As PivotTable, pi As PivotItem
Dim arr() As Variant
Dim map As New collection
Set w = Sheets("data")
i = 0
For Each pi In w.PivotTables(1).PivotFields("date").PivotItems
If pi.Visible Then
i = i + 1
End If
Next
ReDim arr(1 To i)
i = 1
For Each pi In w.PivotTables(1).PivotFields("date").PivotItems
If pi.Visible Then
j = Split(pi.Name, " - ")(0)
k = Format(j, "mm/dd/yyyy")
arr(i) = k
map.Add CStr(pi.Name), CStr(k)
i = i + 1
End If
Next
Call QuickSort(arr, 1, UBound(arr)) '<--- the sorting method
For Each p In w.PivotTables
For t = 1 To UBound(arr)
p.PivotFields("date").PivotItems(map.Item(arr(t))).Position = t
Next
Next
End Sub