我有一个带有单个日期列字段的数据透视表。我希望将列分组为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列进行分组,但仍然保留该日期格式,以便它可以按顺序排序?
答案 0 :(得分:0)
这应该是最后的手段,但最终我必须在我的日期范围中创建一个开始日期数组,将日期格式更改为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