加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA代码在数据透视表中的应用

(2011-10-08 14:09:39)
标签:

vba

数据透视表

文化

VBA简介

VBA的全称是Visual Basic for Application,它是Microsoft Visual Basic的应用程序版本,它使EXCEL形成了独立的编程环境,它可以自动执行重复的操作、进行复杂的数据分析对比、可以生成报表和图表、用于生成个性化用户界面、OFFICE组件的协同工作、EXCEL二次开发等等。

EXCEL对象模型:EXCEL的对象代表应用程序中的元素,比如工作簿、工作表、单元格、图表或用户窗体等。这些对象一共有100多个,所有这些对象以分层结构(树根状结构)组织在一起就构成了对象模型。

引用数据透视表:一般来说可以有3种方法,一种是使用名称引用对象——数据透视表的名称,第二种是使用索引引用对象——灵气透视表的索引号,第三种是使用RANGE对象.PIVOTTABLE属性,还有一种是利用对象变量对保留数据透视表对象的引用(Dim Pvt as PivottableSet Pvt=<数据透视表的引用>

使用数据透视表名称引用的代码:Sheets(“Sheet1).PivotTables(“透视表名称”).RowFields(1).Name

使用数据透视表序号引用的VBA代码:Sheets(Sheets 1”).PivotTables(1).Name.

使用数据透视表区域的单元格的PIVOTTABLE属性引用数据透视表的VBA代码(,所引用的单元格一定要在引用的数据透视表区域内的,共3种):

Sheets(“Sheets1”).Cells(1,”A”).PivotTable.Name

Sheets(“Sheet1”).Range(“N1”).PivotTable.Name

Sheets(“Sheets1”).Cells(11,14).PivotTable.Name

使用对象变量对数据透视表的引用:

Dim Pvt as PivotTable

Set Pvt = Sheets(“Sheet1”).PivotTables(1)

Pvt.Name

二、利用VBA创建数据透视表

1、通过录制宏得到数据透视表的代码

首先打开录制宏的工具条,在录制宏的工具条上点“录制宏”按钮录制新宏,再在EXCEL工作表中创建一个新的数据透视表后,点停止录制,即可完成一个创建数据透视表的宏代码。

在录制宏产生的VBA代码中,添加字段一般都是用的With/End with结构,结构中的代码以(点.)开头,END WITH结束一个字段的添加。

添加数据字段:AddDataField属性

2、使用”PivottableWizard”方法创建数据透视表。代码如下:

  Sub CreatPivotTable1()

    Dim myPvt As PivotTable

    Sheets("数据源").Range("A1").Select

    Set myPvt = ActiveSheet.PivotTableWizard(SourceType:=xlDatabase, _

    SourceData:=Sheets("数据源").Range("A1:F1044"))

    myPvt.AddFields RowFields:="部门", ColumnFields:=""

    myPvt.AddDataField Field:=myPvt.PivotFields("发生额"), Caption:="月发生额", Function:=xlSum

实际情况下修改相应字段和参数等即可。

3、利用PivotCache(数据缓存)对象创建数据透视表

Sub CreatPivotTable2()

 Dim myPvt As PivotTable, myPvtCa As PivotCache

 Set myPvtCa = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _

SourceData:="数据源!A1:F1044")

Set myPvt = myPvtCa.CreatePivotTable(TableDestination:="")

myPvt.AddFields RowFields:="部门", ColumnFields:=""

  myPvt.AddDataField Field:=myPvt.PivotFields("发生额"), Caption:="月发生额", Function:=xlSum

 ActiveWorkbook.ShowPivotTableFieldList = False

Application.CommandBars("PivotTable").Visible = False

End Sub

需要时根据实际情况修改相应参数或字段等即可。

三、使用虚拟数据字段“DATA”灵活创建数据透视表

Sub CreatPvtWithFunction()

   Dim myPvt As PivotTable, myPvtCa As PivotCache, iMonth As Integer

   Set myPvtCa = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _

SourceData:=Worksheets("数据源").Range("A1").CurrentRegion)

Set myPvt = myPvtCa.CreatePivotTable(TableDestination:=Worksheets("透视表").Range("A3"))

With myPvt

.AddFields RowFields:="项目", ColumnFields:="Data"

For iMonth = 1 To 3

.AddDataField Field:=myPvt.PivotFields(iMonth & "月份产量"), _Caption:=iMonth & "月份", Function:=xlSum

Next

End With

Set myPvt = myPvtCa.CreatePivotTable(TableDestination:=Worksheets("透视表").Range("F3"))

With myPvt

.AddFields RowFields:="Data", ColumnFields:="项目"

For iMonth = 4 To 6

.AddDataField Field:=myPvt.PivotFields(iMonth & "月份产量"), _Caption:=iMonth & "月份", Function:=xlSum

Next

End With

ActiveWorkbook.ShowPivotTableFieldList = False

Application.CommandBars("PivotTable").Visible = False

End Sub

如果在一个数据透视表中有很多数据项的统计为计数,要修改计数和求和的话比较麻烦,可用VBA代码修改,一次完成,非常快捷,代码如下:

Sub ModifyFieldFunction()

     For Each myPvtFd In Sheets("透视表").PivotTables(1).DataFields

myPvtFd.Function = xlSum

Next

End Sub

 

学习和掌握更多有关EXCEL或OFFICE的知识,请登录http://t.excelhome.net/。在这里,一定会让你找到家的感觉。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有