Excel 的 VBA 现在还算是办公利器吗? 非计算机专业学生,但是有少量数据处理任务,对计算机也有兴趣,本打算学VBA,但是有计算机专业的告知用处不大,不如直接学习更强大的Python等脚本,由此两个疑问:1. VBA是否已过气而不值得新人去学习了?2. Python等是否能方便高效地去处理、分析Excel的统计数据呢?谢答。
在编程语言的学习里,循环真是个让初学者又爱又恨的功能,爱是因为它真的很有用,可以完成很多机械化的操作,恨是因为它有些不太容易入门。所以我这写了个文章,告诉大家怎么能比较容易的理解循环语句。
从“偷懒促进社会进步”说起,VBA的循环流程真的好用
引
一直以来,都有一个比较特立独行的观点,是说“偷懒或懒惰促进了社会的进步,科学的发展”。这个观点乍看起来有点离经叛道,但是你品,你细品,还是可以讲出些道理的。
原始的人类因为懒的每次渴了都去河边喝水,所以发明了水桶,提一桶就可以少走好多次路;因为懒的绕远路过河,所以发明了船;因为懒的走路,所以发明了汽车;因为懒的用手算,所以发明了计算器和计算机……
其实这个观点的矛盾是在于离经叛道观点里的“懒”和第二段例子里的“懒”是两个状态。平时最常见的概念里的懒是身体和思想上都很懒,所以才会让人拖延、低效、一事无成。但是让社会进步例子里的懒,却只是说的身体上懒,但是思想上确是活跃的、有创造力的,把偷懒的需求转变为创造性的行动里,然后就可以一劳永逸,可以高效快速的完成工作。
一、我学VBA的故事
我学习VBA的目的最开始其实也是为了偷懒,真的,就只是这个目的。当时刚毕业,在会计师事务所工作,那时候的审计软件还不太发达,所以有些小众的财务软件取不到数据,就只能痛苦的手工做工作底稿,比如管理费用底稿是这样的:
需要在财务软件里导出12份每月的科目余额表,然后把三五十个明细科目的数据一点一点的填到这个表上,填完半天就过去了。面对这个情况我挺痛苦的,于是就开始琢么,然后开始自学了VBA。利用空闲时间陆陆续续琢么了一个周,把VBA写好了,只需要一次性导出科目的凭证序时账,整理一下格式,然后用代码就可以直接生成底稿数据了。
填完底稿还需要审核异常情况,比如需要看一下同一个科目1-12月有没有金额变化非常大的情况,检查一下异常大的月份是什么原因引起的,是否正常。然后又继续琢么代码,然后就可以自动把超出本科目平均值30%的单元格标记成红色,就不用靠人眼在几百个数据里查异常了。
写好代码之后,再有遇到没法用审计软件的项目,我的底稿很快就能完成了,于是可以做些其他的工作,比如把凭证查的细一点,比如摸会儿鱼~~~
自此,我开始尝到用VBA偷懒的甜头,然后随着工作内容的拓展,啄么着写了各种实现偷懒的功能的代码,就把VBA掌握的越来越精通了。
二、什么样的工作能偷懒
那什么样的工作才能偷懒呢?这个要从计算机和人脑的计算方法上的不同说起了。
大脑的计算是模糊计算,能非精确、非线性的处理数据,比如我们日常中会用到“大约、一会儿、漫长、非常小”这样的度量词,而不是确定的5分钟、30米这样的单位。举个例子,说到7000㎡你能意识到这是多大吗,如果换成大约一个标准足球场那么大是不是概念就清晰多了?因为生物的发展历史里就不需要精确地数字,只需要一个大概的标准就可以了,所以在这几亿年的历史里就练就了厉害的模糊计算的本领。
而计算机的计算原理就和人脑不同,从发明计算机开始就是对0、1进行运算,所以计算机的计算是精确的,有条理的。计算机可以很容易的对比较大的数字进行数学运算,也可以对各种精确地逻辑条件进行运算,计算机可以很容易的准守逻辑规则,在某个情况下执行特定的运算过程。
其实大家别小看人脑,模糊计算也是很厉害的,计算机在这方面也很难比得上人脑。比如说图像识别,让计算机来识别一张森林背景里的一只猫一直都是件挺难的事。近些年来,随着计算能力的增强以及各种算法的改进,计算机终于可以做出些图像识别的事了,但是这个需要很厉害的编程基础,而且结果还经常出错。但是大脑就很容易识别到这只猫,因为动物的发展历史里就锻炼了脸部和身体识别的本领,没锻炼出快速识别面部本领的动物可能因为来不及跑,都被天敌吃干净了。比如你看这些图像不像脸:
说起来模糊计算这么厉害,所以其实大脑也挺累的,而且当大脑反复的干一件事情时就会特别疲惫,举个简单的例子,叫做语义饱和:你有没有这种感觉,一个字在短时间内看的次数太多就好像不认识了?比如我在写这篇文章的时候就有点不认识“懒”这个字了。
如果不想重复的机械化劳动,那该怎么办呢?把它交给计算机就好了嘛,除非散热不好热到死机,计算机是不会喊累的。
所以,什么样的内容交给计算机最合适呢,上面其实已经写出来了,总结一下:当一个工作属遵循严格的逻辑条件,进行大量的机械化的精确运算过程,就适合交给计算机。
四、编程的流程
在各种编程语言里,都有最基础的三个流程:顺序、选择(或者叫分支)、循环。
顺序最容易理解,就是一直按照特定的步骤执行各种运算和操作:
选择也比较容易理解,满足某个逻辑关系时执行某些语句,不满足条件时执行另外的语句:
循环语句稍微复杂那么一丢丢,但也不是很难,就是在满足某个条件下反复的执行某些语句,直到不满足这个条件,则跳过循环部分,继续执行后面的语句。下图橙色部分就是循环:
五、VBA里的循环
今天文章的重点就是要讲这个循环流程啦,就是它可以让计算机进行成百上千万次重复工作。循环有个逻辑条件,就是在什么情况下循环,在什么情况下不循环,这个逻辑条件是必须有,并且要特别注意写完善了,否则一直重复一直重复没有尽头,计算机就停不下来啦,这也是俗称的死循环。
VBA的循环大的种类有两种,一种是由Do…Loop循环,另一种是For…Next循环。
Do…Loop循环用起来比较自由,有一个用于判断是否执行循环的While语句,只要满足逻辑条件时真值就能进行循环。但是我不太推荐在Excel里使用这个语句,因为并不是所有的自由都是好的,在写代码的时候,这种自由有可能让你的代码进入死循环。因为While语句里必须是一个逻辑判断语句,而且这个逻辑判断需要在循环的代码进行改变,什么时候继续循环,什么时候退出循环的变化都需要做好规划并写出完善的代码,所以万一没写好,就是个死循环。
所以,我自己有一门Excel For VBA课程,在课程里就只教了For…Next循环,都没怎么提Do…Loop循环,因为For循环真的和Excel才是绝配。
六、细说For循环
For循环里细分又有两种,一种是对一个数字变量在一定范围内的循环,另一种是对一组对象进行循环,本质上其实差的不大,两种形式其实都是在对有限个内容进行循环,不太容易出现死循环。
1、数字变量循环
第一种数字变量的循环,一般写成 For i = 1 To 10 Step 2 类似这样的形式,它的含义是现在有一个变量i,规定它的起始值是1,每运行一次循环增加2,当它在10以内的时候,进行循环,超过10了就停止。所以当第一次运行循环里的内容时,i的值是1;循环一圈,第二次运行的时候i就变成了3,再下一次是5,一直到9还继续执行循环;再下一次i变成了11,超过范围,就不循环了。这样,我们就进行了有限次的循环,不容易形成死循环。
另外,For循环还有个很完善的设置,当你的内容写错了,比如写成For i = 1 to 10 Step -2这种,理论上i会越来越小,1、-1、-3、-5……永远也不大于10怎么办?其实它根本都不运行循环呢,直接帮你把整个循环跳过去了。
另外,为什么说For循环和Excel是绝配呢?因为Excel里的数据是有限的,而且都有行号列号啊,比如我们很容易把变量i当成是行号,对我们想变更的数据的每一行进行操作。比如我想对B2:B200区域进行操作,就写成For i = 2 To 200,然后就可以用Cells(i,2)来对每个单元格进行操作啦(当步进长度是1,也就是Step 1时,可以省略Step 1)。
用VBA操作Excel的时候,我们进行循环操作大都是这样有序号的目标,比如有行号、列号、次数、日期等等,都是一个有规律的序列,这个时候用For循环的数字循环方式都很好用!。
2、对象变量循环
先说明一下这个“对象”,首先,它不是指的男女朋友……咳,扯的有点远,拉回来说,对象可以理解为就像一个物体,它有各种各样的属性。比如一个铅球就是一个对象,它有体积、有重量、有温度、有颜色等等各种不同的属性;Excel里也有许多对象,比如每个单元格都是个对象,它有值、有字体、有背景颜色、有边框、有地址……工作表也是对象、工作簿也是对象,插入的图片和表格也是对象。
了解了对象之后再看这个对象变量循环,我再举个生活中的例子:一位超市的员工,现在要对一箱西瓜挨个称重,提前贴上标签方便顾客购买时可以直接拿走。那这个过程用编程的语言思维怎么写呢:
对这个箱子里的每个西瓜进行循环
对现在拿出来的这个西瓜进行称重
打印称重标签
贴到这个西瓜上
把这个西瓜放到展台上
拿另外一个西瓜
VBA代码的写法就和刚刚的这个例子很像,比如我要对A2:D10区域的每个单元格进行操作:
我们有了个【单元格的集合区域A2:D10】——【一箱西瓜】
然后我们对这个集合里的每个【单元格】——【一个西瓜】都拿出来进行操作
先给这单独的单元格起一个简单的名称【Cel】——【这个西瓜】方便引用
然后对这个单元格写代码进行【各种操作】——【称重、打标签、放到展台】
完成这个单元格的操作后继续操作下一个单元格【Next】
把上面这个过程变成代码就是这样的:
For Each Cel in Range("A2:D10")
对Cel对象进行各种操作的代码
Next
(吐槽一下,写代码可是比写文字描述要简单多了呢)
小结
VBA里的For循环的两种写法基础内容就是这样的啦,其实并不难是吧,通过简单的代码,我们就能完成成千上万次重复操作啦,把我们从枯燥的机械化劳动中解放出来,大大的提高了我们的工作效率!
当然,前面介绍的内容还是比较简单的,等把简单的基础练会了,再配上循环的嵌套、选择流程等等内容,就可以实现更多更复杂的内容啦!
大家如果对VBA感兴趣,想进一步学习,可以联系我~
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/13493.html