excel使用教程_數據分析Excel必備技能:數據透視表使用教程

江米小棗tonylua | 作者

掘金 | 來源

處理數量較大的數據時,一般分為數據獲取、數據篩選,以及結果展示幾個步驟。在 Excel 中,我們可以利用數據透視表(Pivot Table)方便快捷的實現這些工作。

本文首先手把手的教你如何在 Excel 中手動構建一個基本的數據透視表,最后用 VBA 展示如何自動化這一過程。

注:

本文基于 Excel 2016 for Mac 完成,個別界面和 Windows 版略有差異

如果要完成 VBA 的部分,Excel for Mac 需要升級到 15.38 版本以上

Excel 2007 及之后的頂部 Ribbon 菜單,文中簡稱為 Ribbon

開啟“開發工具”菜單的方法也請自行了解

1、源數據

Excel 提供了豐富的數據來源,我們可以從 HTML、文本、數據庫等處獲取數據。

這個步驟本文不展開討論,以下是我們作為分析來源的工作表數據:

2eb672575f77986371f7cbe36bb28f6b.png

2、創建數據透視表

  • 此處將工作表重命名為sheet1
  • 首先確保表格第一行是表頭
  • 點擊表中任意位置
  • 選中 Ribbon 中的“插入”
  • 點擊第一個圖標“數據透視表”,出現“創建數據透視表”對話框
f49d204e28eae85fcf759f2506ced524.png

注意觀察對話框中的各種選項,這里我們都采用默認值

點擊“確定”后,一個空的數據透視表出現在了新工作表中:

c4c9a4025965575e540c569def3aea73.png

3、數據透視表中的字段

  • “數據透視表生成器”菜單中,選擇“球隊、平、進球、失球、積分、更新日期”幾個字段
ff5c10b647354f8f4de2acf47f5c4d88.png
  • 將“平”拖放至“行”列表中的“球隊”上方;表示在“平局”的維度上,嵌套(nesting)的歸納了“球隊”的維度
  • “更新日期”拖放至“篩選器”列表中;表示可以根據更新日期來篩選顯示表格數據
5e1e0a92f8fc5c6de7b818744728f35c.png
  • 分別對當前“值”列表中的幾個字段,點擊其右側的i圖標
  • 因為本例中無需計算其默認的“求和”,故將這幾個字段的“匯總方式”都改為“平均值”
365f67b91c56a1cc3b3bdb4fe0982f25.png
  • 暫時關閉“數據透視表生成器”
  • 該窗口隨后可以用“字段列表”按鈕重新打開
668d31dc216c89418c69cc8537473663.png

此時一個基本的數據透視表已經成型

f84d16125ff10ca4a055f83bb5ba8a3a.png

4、增加自定義字段

有時基本的字段并不能滿足分析的需要,此時就可以在數據透視表中插入基于公式計算的自定義字段。

下面用不同的方法加入兩個自定義字段:

1.簡單運算的公式

首先簡單計算一下各隊的場均進球數:

  • 點擊數據透視表中的任意位置,以激活“數據透視表分析” Ribbon 標簽
  • 點擊“字段、項目和集”按鈕,在彈出的下拉菜單中選擇“計算字段”
  • “插入計算字段”對話框會出現
  • 在“名稱”中填入“場均進球”
  • “字段”列表中分別雙擊“進球”和“場次”
  • 以上兩個字段會出現在“公式”框中,在它們中間鍵入表示除法的斜杠/
  • 也就是說,此時“公式”部分為 =進球/場次
e8705bb980ed941c124a632e32c84eba.png
  • 點擊“確定”關閉對話框,數據透視表中出現了新的“求和/場均進球”字段
  • 按照之前的方法,將字段的匯總方式改為“平均值”,確定關閉對話框
acd0034d3ed9569fa9c389047c4f259c.png

2.調用 Excel 公式

再簡單的評估一下球隊的防守質量,這里我們假設以如下 Excel 公式判斷:

= IF(凈勝球>=0,2,1)

防守還不錯的取 2,不佳的則標記為 1。

  • 按照剛才的方法新建一個計算字段
  • 將上述公式填入“公式”
6005488b7f6029be6a04836dc3ccfaf0.png
  • 將字段的匯總方式改為“計數” -- 雖然在此處并無太多實際意義

5、利用切片器過濾數據

除了可以在“數據透視表生成器”中指定若干個“過濾器”,切片器(Slicers)也可以用來過濾數據,使分析工作更清晰化

切片器的創建非常簡單:

  • 在 Ribbon 中點擊“插入切片器”按鈕
  • 字段列表中選擇“勝”、“負”
  • 兩個切片器就出現在了界面中
bab6145af0709b886b5063d3aa28cd94.png
  • 點擊切片器中的項目就可以篩選
  • 結合 ctrl 鍵可以多選
12e0bd00626cf443b0cd5015a3f0a119.png

6、成果

至此,我們得到了一個基于源數據的、可以自由組合統計維度、可以用多種方式篩選展示數據透視表

可以在 Ribbon 的“設計”菜單中選擇預設的樣式等,本文不展開論述。

aa71360632e7233e857f7b6f0ce551ae.png

以上就是創建數據透視表的基本過程。

7、自動化創建

基本的數據透視表的創建和調整并不復雜,但如果有很多類似的重復性工作的話,使用一些簡單的 VBA自動化這一過程,將極大提升工作的效率。

本例中使用 VBA 腳本完成與上述例子一樣的任務,對于 VBA 語言僅做簡單注釋,想更多了解可以自行查閱官方的文檔等

1.一鍵生成

此處我們放置一個按鈕源數據所在的數據表,用于每次點擊自動生成一個數據透視表。

  • 在 Ribbon 的“開發工具”中點擊按鈕
  • 在界面任意位置框選一個按鈕的尺寸
  • 釋放鼠標后彈出“指定宏”對話框
  • 此處我們將“宏名稱”框填入 ThisWorkbook.onCreatePovit
  • “宏的位置”選擇“此工作簿”
  • 點擊"編輯"后關閉對話框
9d8dff7b17b1054352a8983f7852b377.png
  • 將按鈕名稱改為“一鍵生成透視表”
b5c4e37c7299ea5a8748e461563d563b.png

2.腳本編寫

  • 點擊 Ribbon 中“開發工具”下面第一個按鈕“Visual Basic”
  • 在出現的“Visual Basic”編輯器中,選擇左側的“ThisWorkbook”類目
  • 在右側編輯區貼入下面的代碼
76e9344779a8a967cdf14e04fc1bc4aa.png
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 =?TrueEnd Sub

3.運行程序

回到界面中,每次點擊按鈕就會在新工作表中生成結構和之前例子一致的數據透視表

0b9bfa408603769bb0cd9421d95dc77b.png

8、總結

  • 本文簡單的展示了在 Excel 中創建透視表的過程,以及其篩選、展示數據的方式
  • 通過 VBA 可以完成和手動創建一樣甚至更多的功能,并大大提高工作效率

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374554.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.典型用戶 - 場景

典型用戶: 名字黃德勝性別、年齡男,35歲職業自由投資人收入20萬元/年知識層次和能力專科,有一定的投資經驗,對經濟有自己的看法生活/工作情況已婚,生活負擔在加重動機,目的,困難想要增加收入&am…

java調用webservice_篤學私教:Java開發網站架構演變過程-從單體應用到微服務架構詳解...

原標題:篤學私教:Java開發網站架構演變過程-從單體應用到微服務架構詳解Java開發網站架構演變過程,到目前為止,大致分為5個階段,分別為單體架構、集群架構、分布式架構、SOA架構和微服務架構。下面玄武老師來給大家詳細…

再把你的錢加倍

總覽 很久以前,我寫了一篇關于用雙倍賺錢的文章。 但是,當解決方案相當簡單時,仍然是許多開發人員普遍擔心的問題。 用雙倍賺錢的問題 double有兩種類型的錯誤。 它存在表示錯誤。 即,它不能完全代表所有可能的十進制值。 即使0…

單元測試中Assert類的用法

Assert類所在的命名空間為Microsoft.VisualStudio.TestTools.UnitTesting 在工程文件中只要引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll就可以使用了, 在這里我會舉例說明Assert里面的一些主要的靜態成員。 1、 AreEqual:方法被重載…

CocoaPods安裝使用

$ gem sources --remove https://rubygems.org/ //等有反應之后再敲入以下命令 $ gem sources -a http://ruby.taobao.org/*** CURRENT SOURCES ***http://ruby.taobao.org/ //出現這個說明安裝正確$ sudo gem install cocoapods 安裝cocoaPods到項目的路徑下 $ touch Pod…

303. 區域和檢索 - 數組不可變(數組前綴和知識應用)

給定一個整數數組 nums&#xff0c;處理以下類型的多個查詢: 計算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之間的 nums 元素的 和 &#xff0c;其中 left < right 實現 NumArray 類&#xff1a; NumArray(int[] nums) 使用數組 nums 初始化對象 in…

pat1049. Counting Ones (30)

1049. Counting Ones (30) 時間限制10 ms內存限制65536 kB代碼長度限制16000 B判題程序Standard作者CHEN, YueThe task is simple: given any positive integer N, you are supposed to count the total number of 1s in the decimal form of the integers from 1 to N. For ex…

加油站會員管理系統源碼php_加油站使用會員管理系統,如何解決行業瓶頸?

隨著人們生活條件的不斷改善&#xff0c;基本上家家戶戶都有了私家車輛&#xff0c;這對于加油站而言&#xff0c;覆蓋的客戶量也逐漸增多。現在很多加油站還是處于比較傳統的收銀模式和會員營銷管理模式&#xff0c;收銀效率低&#xff0c;客戶得不到全方面的管理。尤其是在高…

專2-第二課 Eclipse開發環境搭建

2.1下載Eclipse 2.2 安裝C/C版本的Eclipse 2.3 安裝JDT插件開發Java程序 2.4 使用Eclipse開發驅動程序 既然安裝了eclipse來進行驅動學習&#xff0c;那么我們就先來試試看eclipse開發驅動的大致流程。這里以Linux設備驅動作為示列給讀者展示整個流程&#xff0c;Android底層的…

使用JAXB從XSD生成XML

這是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla發表的帖子。 Mohamed解釋了如何使用JAXB從給定的XSD生成XML 。 &#xff08;注意&#xff1a;對原始帖子進行了少量編輯以提高可讀性&#xff09; 我們可以使用JAXB使用給定的Schema將Java對象編組為XML&#…

tkinter 菜單添加事件_Tasker的最新測試劫持了Android 11的電源菜單

流行的Android自動化應用Tasker 最近收到了重大更新&#xff0c;為該應用引入了許多新功能。該更新包括解鎖應用程序讀取手機上任何傳感器以觸發任務的功能&#xff0c;使您可以通過任何第三方應用程序自動發送短信或撥打電話的功能&#xff0c;完全請勿打擾自定義功能。通過鏈…

CLR via C#(18)——Enum

1. Enum定義 枚舉類型是經常用的一種“名稱/值”的形式&#xff0c;例如&#xff1a; public enum FeedbackStatus { New, Processing, Verify, Closed } 定義枚舉類型之后我們在使用時方便了許多&#xff0c;不用再記著0代表什么狀態…

PHP中 magic_quotes_gpc 和 magic_quotes_runtime 區別及其反斜線轉義問題

php中關于反斜線轉義&#xff1a;php中數據的魔法引用函數 magic_quotes_gpc 或 magic_quotes_runtime 設置為on時&#xff0c;當數據遇到 單引號 和 雙引號" 以及 反斜線\ NULL時自動加上反斜線&#xff0c;進行自動轉義。注釋&#xff1a;默認情況下&#xff0c;PH…

JDK中的設計模式

Zen的JCG合作伙伴Brian Du Preez 是IT藝術領域的合作伙伴&#xff0c;他在收集JDK中最常見的設計模式方面做得非常出色。 模式列表確實令人印象深刻且很長&#xff0c;所以讓我們不再ba不休&#xff0c;向您展示它。 前幾天&#xff0c;我在企業Dev中看到了Rob Williams Brain …

414. 第三大的數

給你一個非空數組&#xff0c;返回此數組中 第三大的數 。如果不存在&#xff0c;則返回數組中最大的數 方法一 首先將數組排序&#xff0c;然后通過集合去除重復的元素&#xff0c;最后進行一次判斷&#xff0c;選擇第三大元素還是最大元素 class Solution {public int thir…

bufferevent 與 socket

http://blog.sina.com.cn/s/blog_56dee71a0100qx4s.html 很多時候&#xff0c;除了響應事件之外&#xff0c;應用還希望做一定的數據緩沖。比如說&#xff0c;寫入數據的時候&#xff0c;通常的運行模式是&#xff1a; l 決定要向連接寫入一些數據&#xff0c;把數據放入到緩沖…

Codeforces Round #102 (Div. 1) A. Help Farmer 暴力分解

A. Help Farmer題目連接&#xff1a; http://www.codeforces.com/contest/142/problem/A Description Once upon a time in the Kingdom of Far Far Away lived Sam the Farmer. Sam had a cow named Dawn and he was deeply attached to her. Sam would spend the whole summe…

電力電子、電機控制系統的建模和仿真_清華團隊研發,首款國產電力電子仿真軟件來啦~已捐贈哈工大、海工大、清華使用!...

點擊上方電氣小青年&#xff0c;關注并星標由于微信改版&#xff0c;只有星標才能及時看到我們的消息哦━━━━━━推薦閱讀&#xff1a;《膜拜大神&#xff01;清華大學電機系2021年接收推薦免試直碩(博)生擬錄取名單公示&#xff01;》《滴滴程序員年薪80萬被鄙視不如在二本…

JVM如何處理鎖

當我們談論最新版本的Sun Hotspot Java虛擬機1.6時&#xff0c;當您嘗試從java.util.concurrent.locks.Lock實現獲取鎖或輸入同步塊時&#xff0c;JVM將執行以下三種鎖類型&#xff1a; 有偏見的 &#xff1a;有時即使在并發系統中也沒有爭用&#xff0c;并且在這種情況下&…

基于node.js及express實現中間件,實現post、get

首先&#xff0c;當然是有必要的環境&#xff0c;安裝node&#xff0c;這個我就不多說了。 依賴模塊&#xff1a; "express": "^4.13.4", "request": "^2.72.0", "body-parser": "^1.13.3",頁面 $.ajax({type: &q…