處理數量較大的數據時,通常分爲數據獲取、數據篩選,以及結果展現幾個步驟。在 Excel 中,咱們能夠利用數據透視表(Pivot Table)方便快捷的實現這些工做。php
本文首先手把手的教你如何在 Excel 中手動構建一個基本的數據透視表,最後用 VBA 展現如何自動化這一過程。html
注: 數據庫
Excel 提供了豐富的數據來源,咱們能夠從 HTML、文本、數據庫等處獲取數據。windows
這個步驟本文不展開討論,如下是咱們做爲分析來源的工做表數據:bash
sheet1
注意觀察對話框中的各類選項,這裏咱們都採用默認值編輯器
點擊「肯定」後,一個空的數據透視表出如今了新工做表中:ide
i
圖標此時一個基本的數據透視表已經成型工具
有時基本的字段並不能知足分析的須要,此時就能夠在數據透視表中插入基於公式計算的自定義字段。開發工具
下面用不一樣的方法加入兩個自定義字段:ui
首先簡單計算一下各隊的場均進球數:
/
=進球/場次
再簡單的評估一下球隊的防守質量,這裏咱們假設以以下 Excel 公式判斷:
= IF(淨勝球>=0,2,1)
防守還不錯的取 2,不佳的則標記爲 1。
除了能夠在「數據透視表生成器」中指定若干個「過濾器」,切片器(Slicers)也能夠用來過濾數據,使分析工做更清晰化。
切片器的建立很是簡單:
至此,咱們獲得了一個基於源數據的、能夠自由組合統計維度、能夠用多種方式篩選展現的數據透視表。
能夠在 Ribbon 的「設計」菜單中選擇預設的樣式等,本文不展開論述。
以上就是建立數據透視表的基本過程。
基本的數據透視表的建立和調整並不複雜,但若是有不少相似的重複性工做的話,使用一些簡單的 VBA 來自動化這一過程,將極大提高工做的效率。
本例中使用 VBA 腳本完成與上述例子同樣的任務,對於 VBA 語言僅作簡單註釋,想更多瞭解能夠自行查閱官方的文檔等
此處咱們放置一個按鈕在源數據所在的數據表,用於每次點擊自動生成一個數據透視表。
ThisWorkbook.onCreatePovit
Sub onCreatePovit()
Application.DisplayAlerts = False
' 聲明變量 Dim sheet1 As Worksheet Dim pvtTable As PivotTable Dim pvtField As PivotField Dim pvtSlicerCaches As SlicerCaches Dim pvtSlicers As slicers Dim pvtSlicer As Slicer ' 刪除可能已存在的透視表
Dim existFlag As Boolean
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "pivot1" Then existFlag = True: Exit For
Next
If existFlag = True Then
Sheets("pivot1").Select
ActiveWindow.SelectedSheets.Delete
End If
' 初始化 Set sheet1 = ActiveWorkbook.Sheets("sheet1") Set pvtSlicerCaches = ActiveWorkbook.SlicerCaches ' 指定數據源
sheet1.Select
Range("A1").Select
' 建立透視表 Set pvtTable = sheet1.PivotTableWizard ActiveSheet.Name = "pivot1" ' 指定行和列
pvtTable.AddFields _
RowFields:=Array("平", "球隊"), _
ColumnFields:="Data"
' 指定數據字段 Set pvtField = pvtTable.PivotFields("失球") pvtField.Orientation = xlDataField pvtField.Function = xlAverage pvtField.Name = "平均值/失球" Set pvtField = pvtTable.PivotFields("進球") pvtField.Orientation = xlDataField pvtField.Function = xlAverage pvtField.Name = "平均值/進球" Set pvtField = pvtTable.PivotFields("積分") pvtField.Orientation = xlDataField pvtField.Function = xlAverage pvtField.Name = "平均值/積分" ' 指定計算字段
pvtTable.CalculatedFields.Add Name:="場均進球", Formula:="=進球/場次"
Set pvtField = pvtTable.PivotFields("場均進球")
pvtField.Orientation = xlDataField
pvtField.Function = xlAverage
pvtField.Name = "平均值/場均進球"
pvtTable.CalculatedFields.Add Name:="防守質量", Formula:="= IF(淨勝球>=0,2,1)"
Set pvtField = pvtTable.PivotFields("防守質量")
pvtField.Orientation = xlDataField
pvtField.Function = xlCount
pvtField.Name = "計數/防守質量"
' 指定切片器 Set pvtSlicers = pvtSlicerCaches.Add(pvtTable, "勝", "勝_" & ActiveSheet.Name).slicers Set pvtSlicer = pvtSlicers.Add(ActiveSheet, , , , 300, 400) Set pvtSlicers = pvtSlicerCaches.Add(pvtTable, "負", "負_" & ActiveSheet.Name).slicers Set pvtSlicer = pvtSlicers.Add(ActiveSheet, , , , 350, 450) ' 指定過濾器
Set pvtField = pvtTable.PivotFields("更新日期")
pvtField.Orientation = xlPageField
Application.DisplayAlerts = True
End Sub複製代碼
回到界面中,每次點擊按鈕就會在新工做表中生成結構和以前例子一致的數據透視表
若是遇到此類問題,可按如下步驟嘗試解決:
vbe6ext.OLB
from http://www.121down.com/soft/softview-63611.html
vbe6ext.OLB
to C:\Program Files\Common Files\microsoft shared\VBA\VBA6
and C:\Program Files\Common Files\microsoft shared\VBA\VBA7
and C:\Program Files\Common Files\microsoft shared\VBA\VBA7.1