更改数据透视表日期字段列格式然后排序字段
问题描述:
我有一个数据透视表与单个日期列字段。我想将列按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 ...是在错误的地点。原因是,在这一点上,该领域被认为是纯粹的文本,但不是日期。
我尝试修复的方法是将日期格式更改为“mm/dd/yy”以更好地排序。举例来说,日期将如下所示:05/01/13 - 05/07/13
。但问题是,当我再次组队时,日期自动变回原来的状态。
有没有一种方法来编程分组pivotTable列,但仍保持该日期格式,以便它可以按顺序排序?
答
这应该是最后的手段,但最终我不得不在我的日期范围内创建一个开始日期的数组,将日期的格式更改为mm/dd/yyyy
,对其进行排序,然后根据该日期调整pivotItems的位置数组索引定位。我通过将数组项作为映射中的键来实现,其值是实际的pivotitem名称。
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