0

我有一个带有单个日期列字段的数据透视表。我想让列按 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。但问题是,当我再次去分组时,日期自动变回原来的样子。

有没有办法以编程方式对数据透视表列进行分组,但仍保持该日期格式,以便按顺序排序?

4

1 回答 1

0

这应该是最后的手段,但最终我不得不在我的日期范围内制作一个开始日期的数组,将日期的格式更改为mm/dd/yyyy,对其进行排序,然后根据数组索引定位调整 pivotItems 的位置。我通过将数组项作为映射中的键来做到这一点,值是实际的数据透视项名称。

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
于 2013-06-14T15:21:33.530 回答