2013-06-11 85 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 
相關問題