2013-06-11 7 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