【问题标题】:Why does the Periods argument of Excel.Range.Group take an array?为什么 Excel.Range.Group 的 Periods 参数需要一个数组?
【发布时间】:2013-10-01 10:52:11
【问题描述】:

最近我正在学习如何使用 VBA 在 Excel 中自动创建数据透视表,而 Excel.Range.Group() 方法的实现让我感到很奇怪。第四个参数Periods 采用一个包含7 个元素的布尔值数组来指示分组是按秒、分、小时、天、月、季度还是年。通常,您会通过使用 Enum 类型来完成类似的操作,该类型的成员可以是 Or'd 一起表示打开了一个或多个选项 - 其中的 MsgBox function is a good example

例如,我本来希望用法更像这样......

MyPivotTable.DataRange.Cells(1).Group Periods:=vbGroupPeriods.Days Or _
    vbGroupPeriods.Months

而不是...

MyPivotTable.DataRange.Cells(1).Group Periods:=Array(False, False, False, _
    True, True, False, False)

我环顾四周,试图理解为什么它是用Array 完成的,但到目前为止还是空手而归。所以,我的问题是为什么要这样做?是否有一些我没有看到的限制?这是某人的个人选择吗?或者这只是一个谜?不是想抱怨,只是想理解。

【问题讨论】:

  • 我猜这只是某人/某个团体做出的决定......
  • 我注意到PivotField.Subtotals 似乎有类似的东西——如果没有指定索引,你会得到一个布尔数组。

标签: arrays excel grouping pivot-table vba


【解决方案1】:

Q1.为什么会这样?

也许是因为它为您提供了更大的灵活性?对我来说,输入True 7 次更容易

Array(True, True, True, True, True, True, True)

而不是说

vbGroupPeriods.Seconds Or _
vbGroupPeriods.Minutes Or _
vbGroupPeriods.Hours Or _
vbGroupPeriods.Days Or _
vbGroupPeriods.Months Or _
vbGroupPeriods.Quarters Or _
vbGroupPeriods.Years 

另外数组中的序列也不是很难记...

秒-->分-->小时-->天-->月-->季-->年

Q2。是否有一些我没有看到的限制?

没有限制。

Q3.这是某人的个人选择吗?还是只是个谜?

不 :) 不神秘。这绝不是任何人的个人选择。 Microsoft 有一个专门负责 Excel 开发的团队,负责决定和灌输特定的特性/功能。

【讨论】:

    【解决方案2】:

    添加到 Siddharth Rout 的回答中,这是我发现的地方和内容:

    [http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=153:excel-pivot-tables-grouping-group-items-group-data-and-group-date-values-using-vba&catid=79&Itemid=475][1]

    使用分组方法对数字项或日期值进行分组。语法:RangeObjectVariable.Group(Start, End, By, Periods)。 Start、End、By 和 Periods 的所有 4 个参数都是可选的,并在下面解释。

    开始 - 分组从此值开始,如果省略或 True 表示字段中的第一个值。

    End - 分组在此值处结束,如果省略或 True 表示字段中的最后一个值。

    By - 指定数字字段的组大小;对于日期字段,它指示天数,以防数组元素 4(天)设置为 True,并且 Periods 参数中的所有其他元素都为 False,否则此参数将被忽略并为组选择默认大小。

    周期 - 一个由 7 个布尔值组成的数组:

    • 元素 1 表示秒周期
    • 元素 2 是分钟
    • 元素 3 是小时
    • 元素 4 是天
    • 元素 5 是月份
    • 元素 6 是 Quarters
    • 元素 7 是年。

    Bollean 值为 True 的元素表示创建组的时间段。 Periods 的这个参数仅对 Date 字段有效。

    需要注意的是,RangeObject 只能是单个单元格,否则该方法将失败而不会显示任何错误。

    Sub PivotTableGroupData1()
    
    
    Dim PvtTbl As PivotTable
    Dim rngGroup As Range
    Set PvtTbl = Worksheets("Sheet6").PivotTables("PivotTable1")
    
    'set range of dates to be grouped
    Set rngGroup = PvtTbl.PivotFields("Dates").DataRange
    
    'rngGroup.Cells(1) indicates the first cell in the range of rngGroup - remember    that the RangeObject in the Group Method should only be a single cell otherwise the method will fail.
    rngGroup.Cells(1).Group Periods:=Array(False, False, False, True, True, True, False)
    
    'to ungroup:
    'rngGroup.Cells(1).Ungroup
    
    
    End Sub
    

    我想补充一点,我花了几个月的时间才找到句号的确切定义。以为我会分享...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2019-03-11
      • 2012-11-08
      • 1970-01-01
      • 2013-10-22
      • 2012-03-05
      • 2017-05-07
      • 2015-02-15
      相关资源
      最近更新 更多