VBA学习之关于数据透视表的应用
工作中很多地方需要同时处理多个数据表,而且用数据透视表进行排版,排序,计算字段,一个一个的做非常累,这里给出批量处理的方法。
学习VBA之前最好懂一点点VB的基础知识,因为里面的很多语法问题都是由VB来的。
Sub 出库数据一键生成数据透视表() '先判定sheet表名称是否正确 If ActiveSheet.name = "出库" Then MsgBox "这个是出库数据,请继续!!" Dim name As String Dim arr As Variant Dim 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 Next Application.ScreenUpdating = True Else MsgBox "sheet表名称不对吧????一定得是 出库" End If End Sub
做VBA首先得会录制宏,不会就F1,会大大提高学习效果。
Application.ScreenUpdating 这个是代表是否使用屏幕刷新,处理大数据的时候最好将其关闭,否则你会卡死的。
其他的自己摸索摸索就会了