Excel 从精通到入门
引子
Excel? 这么简单的东西有学的必要吗?公式加减乘除,诶等等这个日期怎么变成 #### 了,虽然文本数字搞不清楚,但也算熟练使用 Excel 啦。
WOW, Awsome, Excel 有点厉害,Vlookup 函数这么方便的吗?我会了这么多东西,简历上写个精通 Excel 不过分吧。
Emmm, Excel 好像比我想象中复杂一点,函数图表有点麻烦噢,好多不知道的东西学也学不完,自己只能说略懂。
额,DAX 是什么,PowerQuery 又是什么,PivotTable 和 PowerPivot 又是什么和什么 @_@ 会手写 VBA,会用数据透视表,搞不定的时候会借助 Python,勉强算是入门好了。
精通 Excel 的几个阶段
说了一大堆,也不知道到底说了啥。简单讲哲人苏格拉底说过,知道的越多,才知知道的越少。Excel 正是第一眼简单,深入了解才知其博大精深。业余使用者从精通到入门大致分为五个阶段:
基础知识、基本操作
单元格格式,表格样式、查找、冻结窗格、自动求和
进阶操作,快捷键,图表
条件格式、筛选、分列等等点点鼠标就可以实现的功能。微博、QQ 空间上有很多只需要点点鼠标就能完成的 Excel 炫酷操作就属于第二阶段。到这里基本上能处理超过大部分工作,而且觉得比较顺手。
如果不是专业做,快捷键不用记很多。用好 Ctrl、Shift、Tab、方向键等的组合键,就能感到得心应手行云流水。
图表本来应该单独归为一类。我的本业是数据可视化,但我一直相信条理清楚的数据自己会说话,做表格的时候拎得清比花哨的图表更重要,在恰当的时机会用图表即可。
公式、函数
函数指带形式上括号的,返回一定结果的计算过程。主要分为逻辑、文本、时间和日期、查找四大类。
精通 Excel 的分界线
- 数据透视表
- VBA
入门 Excel 的分界线
- (论外)更深入的领域
- 其他,文件,Office 套件联动
一个例子
总是说 Excel 有多厉害,难免有往自己脸上贴金之嫌。那么通过实际的工作,展示一下处理好一张 Excel 表,需要用到哪些知识和技巧。
场景再现
作为元气满满的公司新人,那些无关大局,却又有点麻烦的事情,当然是要主动去承担啦,不然大事做不来,小事不愿做,对得起公司开的工资嘛。
老师:小王呀,听说你大学学的计算机,那你 Excel 用得一定特别溜啦?
我:(警觉)差不多吧,也不是所有人都用的好,我们专业不考计算机二级的……
老师:那太好啦,我们公司为了激励员工健身,构建了一个考勤机制。每个月健身房打卡超过六次的员工可以发奖金。但是不是每次打卡都是有效的。上班时间打卡不能算。周一到周五下午,周三周五中午是有效时间,超过这个时间就不算了。但是如果没有在上班时间锻炼,可以掐头去尾只留有效时间。外勤、手机打卡不算, 只有在公司健身房门口的考勤机打卡才算。
我:好的,我明白了(大概),我这就去做
老师:这是考勤记录表,你这周做好就行。
我:好的,没问题。俺这就去做
整理思路
先理一理需求:
通过健身打卡记录表,计算员工有效健身的时间和次数。
再让我理一理考勤记录表:
有一个数据规模一万行左右的 Excel 表。
每行是一条打卡记录。员工只要打卡就会留下一行数据。但是这个数据可能是正常签到,也可能是正常签退,当然有更多无效的打卡
姓名可以重名,但是员工 ID 可以当作“主键”
考勤日期和时间,是指预设的打卡时间段。打卡系统对时间段有一个判断,比如说周五 17:39 打卡,对应的是周五下午 17:30 到 20:30 这个时间段。但这个判断不一定准确。
打卡时间,顾名思义员工实际的打卡时间。
打卡地址:在考勤机上打卡,地点固定是公司。
打卡设备:健身房门口考勤机或者手机上打卡。
最后我们理一理其中的逻辑:
上班时间不能打卡,12:00 和 17:30 前十分钟之外,也就是 11:50 和 17:20 之前打卡无效。
周一到周五下午,周三周五中午打卡有效,其余时间段打卡无效。
打卡设备:这条很好判断,健身房门口考勤机有效,其余无效。
正常情况下,连续的两条有效的记录正好是一条有效签到,一条有效签退。但是有的签到和签退无效,与之匹配的另一条也随之失效。所以只有找同一天同一时段同一个人连续两条有效记录。
下午 17:30 到 20:30,中午 12:00 到 14:00 是有效时间。超过有效时间的部分不计入总有效时间。
单次有效时间超过 60 分钟,计为一次有效健身。
最后累加统计每个人的有效健身时间和健身次数。
着手工作
判断的条件和过程可以用一张图清晰的罗列出来。接下来是具体步骤的说明:
首先是筛选。打卡设备“考勤机”,打卡结果不能是“外勤、打卡无效”等。将筛选后的数据另建新表。
接下来的判断和计算分成小步骤。每个判断结果 "TRUE/FALSE" 都会独占一列,最后用 "AND" 逻辑连结。计算结果也会各独占一列,我们称这样的列叫“中间列”。这样做的好处是易读易查易改。
判断是否是同一个人,同一天,直接用 "=" 比较本行(从签到数据开始)和下一行(正常有效的话会是签退数据)共两行的 userid 和考勤日期单元格,有效数据会体现在签到的一行,后文所有的计算结果也在签到的一行有效。
判断打卡时间段,签到或签退,用 FIND( ) 函数,如果 "12:00" 字符串被找到,说明是中午签到时间。
判断出来签到和签退后,也直接用 "=" 试着匹配上下两行签到签退,如果本行是签到,下一行签退,则形成一次完整的打卡记录。
转换打卡时间,用 RIGHT( ) 和 LEN( ) 从形如 "2019-10-24 17:28" 的时间日期字符串中取出 "17:28" 的时间。接着使用 TIMEVALUE( ) 函数转换成数值,单位是天,0:00 的值是 0,12:00 就是 0.5,18:00 的值是 0.75,24:00 的值是…… 0,实际上是第二天的 0。上文中的 17:28 是 0.727777778。
判断是否是非工作时间,用上一步中得到的打卡时间值,和工作时间的时间值比较即可。
调整时间也很简单,用 IF( ) 函数判断在规定时间之前打卡签到,若提前时间点自动调整为打卡时间点,若没有提前,则原样保留。
计算有效时间和判断是否计入总数,用以上步骤得到调整后的签到签退,做差,得到时间段,单位是天,乘以 24 再乘 60 得到分钟数,判断是否大于 60 得到是否是有效的一次健身。至此,一次记录的处理过程结束。然后我们可以拖动单元格,整个表格处理完毕。
接下来,我们可以选中数据,插入数据透视表,选中姓名、有效时间、有效次数,数据透视表会自动按姓名分组,将时间累加,我们可以得到每个人的有效时间之和、总有效次数。在有效时间或次数列右键降序排序,我们可以很清楚的知道哪位同事健身时间比较多、次数比较多,可以给他们多发奖金。
自动化过程
过程清晰,结果正确,但是这样还不能交差。因为每个月都要统计一次,把表交出去之后要和接手的人讲清思路和用法,不亚于重做一遍的工作量,关键是不一定保证一个月之后还有人能记得住。
不过学计算机的孩子嘛,能点一下,就绝不点两下,能自动完成,就绝不手动。只有足够懒,才能变得足够聪明、足够优秀。接下来请“宏”来帮我们完成重复工作。
简单说一下我对“宏”和 VBA 的理解,宏是 VBA 语言编写的脚本,可以完成我们指定的操作,但 VBA 包含的范围不仅仅是宏。VBA 是一种图灵完备的语言,定义变量,赋值运算,逻辑判断,循环跳转都不在话下,顺序执行步骤只是它强大功能的一小部分。
既然我们只需要自动化一些操作,只需要用到录制宏即可,不需要深入了解 VBA。
我们需要录制的功能如下:
筛选数据,选出考勤机、打卡有效的数据
复制筛选后的数据到新数据表
复制判断和计算过程函数
创建数据透视表
隐藏过程中的数据表
在开发工具-->录制宏点击开始录制宏,然后稍做调试修改即可。主要是删改一下数据表名称,使得重复运行时不会读到空表、重复建表、引用旧表。
最后,我们在原始数据表插入一个按钮,关联宏。下次使用时替换原始数据内容,点击就可以运行宏啦。一键得出结果的感觉有没有很棒呢?
这个例子完整的涵盖了精通 Excel 的前五个阶段:
基础知识、基本操作 单元格文本格式、时间日期格式。表格样式,套用表格格式
进阶操作,快捷键,图表 通过筛选去除不符合要求的数据 用到了各种快捷键
公式、函数 公式用到等于大于小于 函数涉及了四大类,逻辑、文本、时间和日期、查找,包括计算过程用到的 FIND( ) COUNT( ) IF( ) ISERR( ) AND( ) RIGHT( ) TIMEVALUE( ) 和辅助工作中用到的,干什么都绕不开的 VLOOKUP( )
数据透视表 用到了最基础的数据透视表功能,筛选分组求和。
VBA 用到了简单的录制和运行宏功能
也就意味着,做完这张表就证明你的 Excel 达到了入门水平,可以继续探索更丰富多彩的表格世界啦。
另一个例子
场景再现
leader:我们这次考核,90 分及格,题库有八百多道题,我们都要背会。这是题库,你们这几天重点记一下。
组员 A:我们可以把这些选项都填到题目里去,打印出来,方便我们看。
组员 B:有的是单选,有的是多选,还挺麻烦。
组员 C:我们每个人分一百道题,把它们复制进去再汇总吧。
我:我们老员工们都很忙,这个就交给我来做吧。下班前能做好。
一行函数,做到把多选题的正确答案填进题目中的空格:
=SUBSTITUTE([@题目],"()","("&IF(ISERROR(FIND("A",[@答案])),"",[@选项A])&" "&IF(ISERROR(FIND("B",[@答案])),"",[@选项B])&" "&IF(ISERROR(FIND("C",[@答案])),"",[@选项C])&" "&IF(ISERROR(FIND("D",[@答案])),"",[@选项D])&")")&" "&[@答案]
下面是解释:
思路很简单,答案中包含 A,就把 A 选项的内容拉出来,否则不拉取。BCD 同理。然后将拉出来的选项拼接成字符串,替换掉空的括号。
形如 "[@列名]" 的引用方式是“结构化引用”,套用表格格式之后可以使用这种引用方式,代替 A1 B2 这种单元格名。
SUBSTITUTE( ) 是文本替换函数,具体用法请查阅文档
IF( ) 我们上个例子中用到过,表示判断
FIND( ) 也用到了,用来查找是否包含某字符
ISERROR( ) 有点难理解,但只要你试一下就立刻会明白它有什么用。FIND( ) 找不到结果会返回一个错误值,只要其中一个返回了错误,就会导致整个嵌套函数的值变成错误。我们要避免单个的结果影响整个函数。
& 用于拼接字符串,字符串可以从单元格得到,也可以是引号中的内容。
多选会了,单选更是小菜一碟。接下来把 Excel 内容复制进 Word,括号中选项标红。Word 替换功能不仅可以替换文字,还可以替换成特定格式。这就是另一个故事了。
总结
本篇结合例子,聊到了 Excel 进阶要掌握的几大块知识,基础、进阶、公式、透视表、VBA。别的点未能提及,不代表它用的不多,只是他们游离在主线之外(更多的因为我自己也不会,以己昏昏使人昭昭哈哈)。
抛砖引玉,学 Excel 不是说今天记了几个公式,明天会了几种操作,马上就能学会了,这些是日积月累的过程。如果硬要说有一种通用的方法,那就是想方设法把自己的问题,转化分解成合乎逻辑的,Excel 可能解决的小问题,然后去搜索每个小问题的解决方案。就像多选填答案的例子,把稍复杂的问题一步步分解成搜索、拼接、替换这些我们已经很熟悉的小问题。
另外学好 Excel 可以免费领女朋友,不是我骗你,不信你自己看。
后面的话
感谢看到这里,拖了五个月之久,憋出一篇狗屁不通的文章。不出意外这应该是 2019 年最后一篇。
写到这里,已经有五千字。最近有的人问过我,你每天到底是在做什么,有什么用呀,为什么不干点正事。也是,就算我把整个公司的表都做了,也不会多拿一点点工资,就算我多会多少东西,也不如一纸证明。再往前想想,我总是在做很多没有用的事呀,以至于不再期待付出能有相应的回报。但是不论多少次问我,我的回答都一样:“我做的东西很多是没有用,但活着这件事本身最没有用。正是这数不清的没用的事,让我觉得自己还活着。”