【问题标题】:Change PivotTable date field column format then sort field更改数据透视表日期字段列格式,然后对字段进行排序
【发布时间】:2020-07-03 15:11:18
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba macos


    【解决方案1】:

    这应该是最后的手段,但最终我不得不在我的日期范围内制作一个开始日期的数组,将日期的格式更改为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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多