我的python学习小站

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  这个是代表是否使用屏幕刷新,处理大数据的时候最好将其关闭,否则你会卡死的。
其他的自己摸索摸索就会了

posted on 2015-01-27 20:57  Hack2To  阅读(2981)  评论(0编辑  收藏  举报

导航