工作中很多地方需要同時處理多個數據表,而且用數據透視表進行排版,排序,計算字段,一個一個的做非常累,這里給出批量處理的方法。
學習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 這個是代表是否使用屏幕刷新,處理大數據的時候最好將其關閉,否則你會卡死的。
其他的自己摸索摸索就會了