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  這個是代表是否使用屏幕刷新,處理大數據的時候最好將其關閉,否則你會卡死的。
其他的自己摸索摸索就會了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM