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列をプログラムでグループ化しながら、その日付形式を維持する方法はありますか?

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 に答える