excel vba 教程:如何使用EXCEL的VBA函数进行编程?

在Excel中,点击“开发工具-Visual Basic”即可进行Vba编程excel vba 教程

进行Excel的Vba编程前,应当先对Excel的常用对象excel vba 教程、属性有一定了解:比如Worksheets对象代表制定工作簿中所有工作表的集合;Worksheet(1)就是工作簿的第一个工作表;Worksheet(1).range(“A1”)返回单元格A1等等......

初学者可以采用录制宏的办法,先模拟需要实现的过程,再对录的宏进行通用性修改,得到最终的Vba代码excel vba 教程。

希望帮到你~

如何快速学习Excel VBA?

新手学习Excel VBA的几点建议,你不妨过来

excel vba 教程:如何使用EXCEL的VBA函数进行编程?

1:调试

经常看到新手学习了很长时间的VBA之后仍然不会使用调试功能,一遇到问题马上就请教他人,这样不利于自身的成长。调试非常重要,是学习代码本身

不可或却的一部分。是诊断,梳理代码逻辑的过程,可以避免逻辑错误的重复性发生。善用调试新手很多的问题都可以得到解决,即可摆脱对他人的依赖性,自身又得到长足的进步,一举两得。

三个窗口,三个功能键:

地方窗口,立即窗口,观察窗口,F1(帮助),F2(属性方法),F8(分步执行)

途中诊断:

断点,stop等等。

2:分拆

(1)语句分拆

长而难懂的句子分拆成基本单元,利用调试功能一个个解决,很容易就理解了它的含义。

如:intRow=Range(\"A\"&Rows.Count).end(xlup).row

立即窗口:?Rows.Count

Range(\"A\"&Rows.Count).Select

Range(\"A\"&Rows.Count).End(xlup).Select

?Range(\"A\"&Rows.Count).End(xlup).row

用眼睛都可以看到每一步Excel选中的哪个单元格,那么自然就不难理解了。这个小范例同时揭示了学习程序过程中一个非常重要的方面:动手尝试。

(2)子程序分拆

把一个冗长的程序按照功能拆分成一个个相对独立的子程序来调用,使得程序具有一定程度的组织性,结构性,规整性大大提高了代码的可维护性,扩展性,重用性。这是贯穿程序语言发展的一条主线,因为它直接指向了程序开发的终极目的之一:开发效率。

3:耐心

学习目的明确≠急于求成。无论学习目的如何直接和明确,学习的过程仍然不是一蹴而就的,\"捷径\"只能是建立在扎实的阶梯式基础上。有些新手基本代码还没写利落就开始用界面写\"系统\",甚至还没学会调试,结果是步履维艰,一步一问,三步一错,无以为继。还有的朋友学习VBA是为了研究彩票,还没学习一星期就开始写各种计算方法,自然处处遇\"难\",大挫学习兴趣,随之放弃。抱着明确的目的学习是好事,不管目的是否\"明智\"(这是另外一个话题),但明确的目的不等于\"急功近利\"。学习的进程总是遵循渐进式的规律,跳跃式的一夜暴富只能是空中楼阁,所以耐心在学习过程中就显得尤为重要。

单独说说效率和速度的问题。程序的效率大致包含两层含义

(1):执行效率;

(2)开发效率。

执行效率又可分为时间效率和空间效率,空间效率不在本贴讨论范围内,所以执行效率简化为速度来讨论。之所以单独拿出来说这个问题是因为论坛很多帖子在\"速度\"追逐上所表现出的\"热忱\"比较极端,走的路比较偏执,希望初学者能够以一个相对平和的心态来看待效率。

执行效率与开发效率,从字眼上分析就知道,程序的最优目标是两者并重。遗憾的是兼顾并非常态,凸出一者的同时往往伤害到另一者。当两者出现矛盾时,职业代码工人较为普遍接受的原则是:\"只有在必须考虑速度的时候才优化执行效率,否则以开发效率为重\"。

换句话说,只有在不得不考虑优化速度的时候执行效率的目标高于开发效率因为要保证功能性,有效性。否则只考虑开发效率不考虑执行效率。职业程序员和职业\"玩家\"在这个问题的认识上经常会产生分歧。

注重效率的程序员

设身处地的想一下,职业程序员在意的是什么?他们在意的是快速,顺利的完成工作,在意的是软件的稳定性,有效性尽量避免老板和客户找他们的麻烦,最终目的就是挣钱,吃饭,养家。花费几个小时来提速几个程序模块,工资没多一分钱,延误了进度,工期老板肯定不干。基于这样的原因,他们顺理成章的注重与可维护性,稳定性,扩展性,重用性相关的开发效率。

追逐\"手筋\"的\"玩家\"~

相比较而言,职业\"玩家\"写代码并非为了工作,没有项目压力,无需考虑开发时间,开发成本,追逐的是华丽的\"手筋\",以及速度飙升所带来的愉悦。其次,速度本身的属性决定了它是一把极其规范,可量化的标尺。基于速度为标准的代码具有极强的博弈性和竞技性,不仅可以独乐还可以众乐。

\"有意义\"和\"无意义\"

前边我们就曾提过\"有意义的快\"和\"无意义的快\",\"有意义的快\"可以包括两种情况分别称作\"根本性速度提升\"和\"规模型速度提升\"。

插播小故事:\"这事儿不赖我\"

某日一油漆工找到一份新工作:刷马路中间的白线。

于是油漆工把一个油漆桶放到了起点上开始工作了。

第一天,油漆工刷了300米,老板大喜,夸奖油漆工:\"工作很出色!\"

第二天,油漆工刷了150米,老板不露声色,鼓励油漆工:\"工作干的不错!\"

第三天,油漆工刷了30米,老板大怒,吼道:\"今天只刷了第一天的1/10,到底怎么回事?\"

油漆工回答:\"这事儿不赖我呀!我每天距离油漆桶越来越远了啦!\"

这个小故事形象的描绘了这样一个事实:改变工作方式可以带来根本性的效率提高。在遇到类似于上述情况时,初学者可考虑优化代码提升速度。

在VBA中当遇到速度慢的不可忍受的情况时,粗略的说可从以下几点入手:

(1)合理化数据源的结构;

(2)用数组一次读写单元格内容,避免频繁操作单元格对象;

(3)查询搜索改用Collection或字典。

所谓\"规模型速度提升\"是指对于应用频次高的问题,可以考虑一次优化速度,应用无数次,追求规模效应降低开发效率损失。至于\"非根本性速度提升\"

的例子可以在论坛看到很多,诸如循环是用指数索引快?还是ForEach索引快?等等,这里就不一一列举了。

用一句话来总结:\"程序的本质是用机器来解放劳动力,而不是用劳动力解放机器!\"

本来想写很多内容,一来由于没什么初学者看所以无收获可言;二来如果深入的话恐会戕害一些坛友的感情;三来目前此帖已有万余字,再多就不像帖子了。再深入展开下去实属下下策,故此楼略显单薄,但基本意思都点到了。剩下关于算法和数据结构的认识和态度在本楼没有提及。

到该结束的时候了,想必大家能理解本贴的态度:不褒不贬。你用,或者不用它,你喜欢,或者不喜欢它,它就在那里,不远不近,无所谓“强\"无所谓”弱\"。

一致性,对称性是匹配的原则。对称匹配,你收获你想要的,Excel,VBA发挥应有的效力;反之,错位匹配引发牵强附会,捉襟见肘。既然谈过了VBA的定位,自然不可避免的要谈一下对其宿主Excel的认识。话题就从这里开始吧......

灵活是把双刃剑

相比VBA而言,Excel的边缘性更强。相信大家都积累了多年的使用经验,是Excel的行家里手,提及某某功能如何实现均可娓娓道来。如果问一个这样的问题:\"Excel到底是什么?\"一言以毕之,\"电子表格工具\"。这种定义只是给Excel起了个别名(alias),不是一种理解,认识和定位。曾经问过自己这个问题,我发现自己答不上来或者说自己的能力不足以回答这个问题。

边缘性强主要表现在使用范围广泛,尤其它还是一款不断升级的产品并且有诸多第三方插件对其进行功能扩展,这时候你会发现无论怎么回答这个问题都是错的,难免给初学者造成\"Excel无所不能\"的错觉。但如果不能予以概念上的定位,就无法回答\"适度\"使用的问题,结果就是一切和表格有关的工作都用Excel来做。

Excel简单易用,功能强大,所见即所得(这可是个不得了的特点),这些都是耳熟能详的特点。个人认为Excel最大的特点来自于灵活:

(1)自由设计用户自己的蓝图,天马行空,个性十足;

(2)Excel分享了数据库的一些特点,具有一定程度的记录和数据存储的功能。虽然可以说Excel缺乏关系结构,但由于灵活的特点,可以用工作表打造出关系结构;

(3)通过各种计算和图表功能,提供多视角数据体验;

(4)腾挪空间广阔,运用水平差异大。

然而灵活性并非是无成本的,灵活的同时就意味着规范性差,同样功能的表格10个人设计出12样儿来,格式,表头,结构,实现方式等等花样百出。

规范性差导致用户交流困难,随着逻辑业务设计复杂程度不断提高,有效性控制繁杂,错误几率增大,急剧加重了设计者的负担。逻辑业务关系越复杂设计成本的增长幅度就越大(呈非线性增长态势)。前些日子看到一位坛友希望把一套表格封装,表格集成了一套用公式表达的复杂逻辑业务关系。其实这套关系本身就是一道加密壁垒,把其中的逻辑梳理清楚比破解还费劲。

个人的一点看法:既然很难在概念上抽象化Excel的定位,只好用一条条描述性的特征来概括Excel,但这种列举是无法穷尽的。

从正面说:

(1)Excel\"适用\"于:逻辑业务关系相对简单,数据规模不大,一锅端式的集成应用;(可惜无法量化定义\"简单\",\"规模\")

(2)对于业务逻辑复杂,规模较大的数据,Excel\"适合\"充当数据库和用户之间的缓冲层(buffer)。致力于数据的展示,整理,综合,\"分析\"等体现灵活性的职责。

从反面说:(表象)

(1)避免用Excel设计大规模业务关系复杂的\"系统\";

(2)避免大量数据存储造成Excel文件尺寸过大;(动辄几十上百M的Excel文件经常能够看到)

(3)避免大量公式集成,重算可以导致文件打开速度过慢,运行速度过缓;

(4)避免搭建Excel文件系统;(几十上百Excel文件组成的文件集也是屡见不鲜)

(5)......

上述情况可以适当考虑使用数据库的功能,毕竟他们之间是有本质区别的。这里只是以我的观点来看待Excel,“不适合\"不代表Excel不能做到,最终的评判要交给用户,谁用谁有话语权而不是设计者和所谓规范的探索者。在能意识到\"隐患\"的条件下,如果您觉得好用,完全可以避免庸人自扰式的思考,坚持走自己的路。

既然Excel的特点是灵活,我们就以一个灵活的态度来认识和对待它好了。

至此关于Excel和VBA的话题就告一段落了,最后再补充一句:

对于业务部门职员来说,Excel,VBA解决工作中的问题真的是够用了,也是很好的选择。如果不够用说明您的工作应该是由IT部门来完成的工作。业务部门的员工扛着VBA去干IT部门的工作,无论是工具和还是工作内容都错位的离谱。

最后收录一些经典语录。既然是收集,就是一个开放和相对漫长的过程,先把帖子的架子搭完,对观众有个交代,

【存在即合理】

<评>:理解\"合理\"的着眼点才能正确的认识,对待,运用好这种存在。一言以毕之不是试图掩盖存在本质的借口就是盲信。

【细节决定成败】

<评>:方向决定\"成\"是否有意义。

【不管什么,只要学好了都牛】

<评>:愤~青的态度抹杀客观存在的差异性。

只要听到\"不管....只要....就....\"的句子就是错的?