最近我学习了如何使用VBA在Excel中自动创建数据透视表,而Excel.Range.Group()
方法的实现让我觉得奇怪。第四个参数Periods
采用7个元素的布尔值数组来指示分组是按秒,分钟,小时,天,月,季度还是年。通常,您会看到使用Enum
类型完成此类操作,其成员可以Or
一起表示已打开一个或多个选项 - {{3那个。
例如,我原本期望使用更像这样......
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
来完成,但迄今为止空手而归。所以,我的问题是为什么这样做?我有没有看到一些限制?这是个人的个人选择吗?还是只是一个谜?不要试图抱怨,只是想了解。
答案 0 :(得分:2)
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开发的团队,负责决定和灌输特定的功能。
答案 1 :(得分:0)
在Siddharth Rout的答案中,这是我发现的地方和发现:
使用分组方法将数字项目或日期值分组。语法:RangeObjectVariable.Group(开始,结束,依据,句点)。 “开始”,“结束”,“按时间段”和“句点”的所有4个参数都是可选的,并在下面说明。
开始-分组从该值开始,如果省略或为True,则表示该字段中的第一个值。
结束-分组以该值结束,如果省略或为True,则表示字段中的最后一个值。
依据-指定数字字段的组大小;对于日期字段,它指示在Periods参数中将数组元素4(天)设置为True并将所有其他元素设置为False的天数,否则将忽略此参数并为组选择默认大小。>
期间-由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
我想补充一点,我花了几个月的时间才能找到“期间”的确切定义。以为我会分享...