Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3696|回复: 3

[分享] 【烟花原创】VBA零基础之第82篇 单元格对象Range(二十六)

[复制链接]
发表于 2014-1-18 23:57 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-1-19 08:09 编辑

Subtotal 方法
 创建指定区域或当前区域(如果该区域为单个单元格时)的分类汇总。
   82-1.jpg
 语法:
  Subtotal(GroupBy, Function, TotalList,Replace, _
      PageBreaks, SummaryBelowData)                              
   GroupBy 必选,要作为分组依据的字段,为基于 1 的整数偏移量。
     对应上图中的分类字段。
   Function 必选,XlConsolidationFunction类型,对应上图中的汇总方式。
    可取值如下:
     xlAverage         平均。
     xlCount    计数。
     xlCountNums   只计数数值。
     xlMax       最大值。
     xlMin        最小值。
     xlProduct 乘。
     xlStDev     基于样本的标准偏差。
     xlStDevP  基于全体数据的标准偏差。
     xlSum        求和
     xlUnknown       未指定任何分类汇总函数。
     xlVar         基于样本的方差。
     xlVarP       基于全体数据的方差。
   TotalList 必选,基于 1 的字段偏移量数组,它指明将被分类汇总的字段。
     对应上图中的分类汇总项
   Replace 可选,对应上图中的替换当前分类汇总,默认值为 True
   PageBreaks 可选,对应上图中的每组数据分页,默认值为False
   SummaryBelowData 可选,代表汇总行在大纲中相对于明细数据行的位置
     xlSummaryAbove 0 汇总行在大纲中位于明细数据行的上方。
     xlSummaryBelow 1 汇总行在大纲中位于明细数据行的下方,默认值。
     这两个取值,可以当成逻辑来看待,True就是在下方,False就是在上方。
     对应于上图中的汇总结果果显示在数据下方

  返回值:Variant
  很多方法的返回值大家在调试代码的时候可以观察下,看看到底返回了什么。

 源数据:
   82-2.jpg

 示例1
  以库别汇总库汇总库存数量(求和)
  With Range("a1").CurrentRegion
   .Sort key1:=.Cells(1, 1), Header:=xlYes
   '源数据无序,汇总前先排序
   '标题行明确指定
   .Subtotal groupby:=1, Function:=xlSum, totallist:=6
   '以库别字段(第1个)汇总,汇总项为库存数量,汇总方式为求和
   '其余参数均以缺省值
   .EntireColumn.AutoFit
   '自动调整列完
  End With
  效果图(只截取部分):
    82-3.jpg

 示例2
  先按库别汇总库数量,再按类别汇总库存金额,汇总方式为求和。
  With Range("a1")
   Application.DisplayAlerts = False
   '如果针对已经做分类汇总的区域排序,会有确认删除当前分类汇总的提示
   .CurrentRegion.Sort key1:=.Cells(1, 1), Header:=xlYes, key2:=.Cells(1, 3),Header:=xlYes
   Application.DisplayAlerts = True
   .CurrentRegion.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=6
   .CurrentRegion.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=7,Replace:=False
   '第二次汇总时,Replace为False
   '其余参数均以缺省值
   .CurrentRegion.EntireColumn.AutoFit
   '自动调整列完
  End With
  上述代码直接在例1的生成的汇总中直接使用。
  效果图:
    82-4.jpg

RemoveSubtotal 方法
 删除列表中的分类汇总。
 应在包含分类汇总的数据清单上调用该方法。
 如果在不包含分类汇总的区域上调用该方法,会产生如下错误:
   82-5.jpg
 示例:
  Range("a1").CurrentRegion.RemoveSubtotal

 问题1:
   示例2中的代码为什么一开不用with range(“a1”).CurrentRegion
   而在后面的代码中使用
subTotal方法前加上.CurrentRegion限定符
   With Range("a1").
CurrentRegion
    .Subtotal
   End With

   With Range("a1")
    
.CurrentRegion.Subtotal
   End With   
   琢磨不透的话建议多代码折腾下,就能发现两者的区别了。

 问题2:
   如何检测指定的单元格所在的区域中是否有分类汇总
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-18 12:40 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-19 09:39 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-29 21:57 | 显示全部楼层
在不包含分类汇总的区域上调用该方法,会产生错误
打算运用判断错误检测指定的单元格所在的区域中是否有分类汇总
居然和clearoutline效果类似,没有见到报错
谢谢分享,标记,八十二
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 18:14 , Processed in 0.217742 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表