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.mzph.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…