【问题标题】:VBA: Pivot Table grouping by (Month,Day,Hour,Minute)VBA:按(月,日,小时,分钟)分组数据透视表
【发布时间】:2018-07-15 18:16:26
【问题描述】:

我正在尝试编写一个可以根据(月、日、小时、分钟)对时间戳列进行分组的代码。我正在使用的代码是

PTable.RowAxisLayout xlTabularRow
    Set PField = PTable.PivotFields("Date")
    With ActiveSheet.PivotTables("BigDataPivotTable").PivotFields("Time Stamp")
        .Orientation = xlRowField
        .Group Start:=True, End:=True, Periods:=Array(False, True, True, _
        True, True, False, False)
        .Position = 1 
    End With

但它没有给我我想要的东西

下面是数据透视表

我希望它看起来像这样

感谢您的帮助,

谢谢,

【问题讨论】:

  • Excel 是这样识别日期,还是将它们视为文本?您可以查看生成的数据透视表是否具有“高级日期过滤器”选项,用于过滤 would-be-dates 字段。
  • 如果你在录制宏时手动执行宏录制器会吐出什么代码?
  • @Mat'sMug 它可以识别时间,但没有分组

标签: excel vba grouping pivot-table slicers


【解决方案1】:

试试这样的:

Range("A4").Select
Selection.Group Start:=True, End:=True, Periods:=Array(True, True, True, _
        True, True, False, False)

【讨论】:

    【解决方案2】:

    Group 方法适用于 Range,而不适用于 PivotField。这就是马特使用“选择”的答案有效的原因。但是,如果您不想使用 select 怎么办?我个人尽可能避免改变选择。将选择留给用户,让 VBA 使用范围。

    在这种情况下,我们需要找到我们想要分组的范围:

       With ActiveSheet.PivotTables("BigDataPivotTable").PivotFields("Time Stamp")
            .LabelRange.Cells(1,2).Group Start:=True, End:=True, Periods:=Array(False, True, True, _
            True, True, False, False)
            .Position = 1 
       End With
    

    这里的关键是.LabelRange.Cells(1,2)。这会找到包含该字段中实际数据的第一个单元格,这就是我们分组的内容。如果我们尝试仅对 .LabelRange 进行分组,则会出现错误,因为这只是字段的标签而不是数据。请注意,我们也不需要为字段选择整个数据范围,只需选择包含数据的字段中的一个单元格。

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 2012-05-25
      • 2016-04-23
      • 1970-01-01
      • 2014-03-12
      • 2021-12-19
      • 2022-12-19
      • 2017-04-14
      相关资源
      最近更新 更多