2013-06-11 51 views
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。但问题是,当我再次组队时,日期自动变回原来的状态。

有没有一种方法来编程分组pivotTable列,但仍保持该日期格式,以便它可以按顺序排序?

回答

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 
相关问题