首页 > 代码库 > VBA学习之关于数据透视表的应用

VBA学习之关于数据透视表的应用

工作中很多地方需要同时处理多个数据表,而且用数据透视表进行排版,排序,计算字段,一个一个的做非常累,这里给出批量处理的方法。

 

学习VBA之前最好懂一点点VB的基础知识,因为里面的很多语法问题都是由VB来的。

Sub 出库数据一键生成数据透视表()先判定sheet表名称是否正确 If ActiveSheet.name = "出库" Then MsgBox "这个是出库数据,请继续!!" Dim name As StringDim arr As VariantDim count, n As Long注意:此程序专门用于ABC出库数据,sheet表名称必须为"出库(发货)"格式必须为 业务员-日期-购货单位-产品名称-规格型号-单位-基本单位实发数量-件数程序会自动筛选你想要的产品的信息并建立新的sheet表,自动生成数据透视表。==============================================          程序作者:clyzly                   ==       有问题联系:QQ76601149               ==============================================Application.ScreenUpdating = False   Cells.Replace What:="(黑龙江)", Replacement:="", LookAt:=xlPart, SearchOrder _        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False    Worksheets.Add after:=ActiveSheet    ActiveSheet.name = "出库数据汇总总表"           自动生成数据透视表        name = "出库数据汇总总表"  给要建立的数据透视表命个名字        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Worksheets("出库").UsedRange, _        Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:=Range("A3"), TableName:="name", DefaultVersion:=xlPivotTableVersion10                ActiveWorkbook.ShowPivotTableFieldList = True                With ActiveSheet.PivotTables("name").PivotFields("产品名称")                    .Orientation = xlColumnField                    .Position = 1                End With                With ActiveSheet.PivotTables("name").PivotFields("业务员")                    .Orientation = xlRowField                    .Position = 1                End With                With ActiveSheet.PivotTables("name").PivotFields("购货单位")                    .Orientation = xlRowField                    .Position = 3                End With    ActiveSheet.PivotTables("name").AddDataField ActiveSheet.PivotTables("name").PivotFields("件数"), "求和项:件数", xlSum    ActiveSheet.PivotTables("name").PivotFields("业务员").Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)        With ActiveSheet.PivotTables("name").PivotFields("业务员")        .PivotItems("XX").Visible = False        .PivotItems("XX").Visible = False    End With            For Each pvtitem In ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems          If pvtitem.name = "XXA" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXA").Position = 1             ElseIf pvtitem.name = "XXB" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXB").Position = 2             ElseIf pvtitem.name = "XXC" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXC").Position = 3             ElseIf pvtitem.name = "XXD" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXD").Position = 4             ElseIf pvtitem.name = "XXE" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXE").Position = 5             ElseIf pvtitem.name = "XXE" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXF").Position = 6             ElseIf pvtitem.name = "XXF" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXG").Position = 7             ElseIf pvtitem.name = "XXG" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXH").Position = 8             ElseIf pvtitem.name = "XXH" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXJ").Position = 9             ElseIf pvtitem.name = "XXJ" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXK").Position = 10             ElseIf pvtitem.name = "XXK" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXL").Position = 11             ElseIf pvtitem.name = "XXE" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXE").Position = 12             ElseIf pvtitem.name = "XXL" Then             pvtitem.Visible = True                ActiveSheet.PivotTables("name").PivotFields("产品名称").PivotItems("XXL).Position = 13          Else             pvtitem.Visible = False          End If        NextApplication.ScreenUpdating = True Else MsgBox "sheet表名称不对吧????一定得是 出库" End If End Sub

做VBA首先得会录制宏,不会就F1,会大大提高学习效果。

Application.ScreenUpdating  这个是代表是否使用屏幕刷新,处理大数据的时候最好将其关闭,否则你会卡死的。
其他的自己摸索摸索就会了

VBA学习之关于数据透视表的应用