Excel VBA 入门到精通详细教程
文章推薦指數: 80 %
懒人Excel 将分享一系列Excel VBA 入门到精通详细教程,帮助读者入门,并逐步提高,应用于自己的 ... 另外,这里vba过程或函数不会“产生”macro,那里只是过程的列表。
跳至内容
ExcelVBA入门到精通详细教程
在Excel众多的概念中,VBA是最重要也是最难学的一部分。
如果涉及到数据处理工作,VBA几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与Office其他软件交互,甚至与操作系统交互实现复杂的功能,VBA几乎都可以胜任。
那么什么是ExcelVBA,如何学习它,懒人Excel带你进入VBA的世界,从最基础的部分开始讲起,一步一步入门到精通,写出自己的VBA程序。
本文目录
隐藏
什么是ExcelVBA?
VBA与宏有什么区别?
学习ExcelVBA有什么用处?
ExcelVBA基础
VBA变量、类型、运算符
VBA程序结构
VBA过程和函数(Sub|Function)
什么是ExcelVBA?
首先,第一个问题,什么是VBA?
VisualBasicforApplications(VBA)是VisualBasic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
主要能用来扩展Windows的应用程序功能,特别是MicrosoftOffice软件。
以上是VBA的百科定义,说简单点,VBA是运行在MicrosoftOffice软件之上,可以用来编写非软件自带的功能的编程语言。
Office软件提供丰富的功能接口,VBA可以调用它们,实现自定义的需求。
基本上,能用鼠标和键盘能做的事情,VBA也能做。
正如前文所述,VBA可以运行在Office软件上,包括Excel、Word、PPT、Outlook等。
VBA语言在Office软件中是通用的,基本语法和用法都相同。
但是每一个软件具有自己独有的对象,例如Excel有单元格对象,Word有段落对象,PPT有幻灯片对象。
回到ExcelVBA,用它可以编写自定义函数,插入任意图表、批量处理大量数据单元格,编写插件自动化工作。
甚至可以编写基于Excel的复杂的管理系统,其功能可以媲美桌面软件。
在本系列教程中,我们学习VBA语言语法和Excel特有的对象的使用。
在往后的教程中,如没有特殊说明,文章提到的VBA指的是ExcelVBA。
VBA与宏有什么区别?
在学习VBA过程中,经常会出现一个说法,「宏」。
简单的说,宏是一段可以运行的VBA代码片段,也可以说是一个简称,并没有特别的不同之处。
所以学习VBA时,不用纠结于两者到底有什么区别,只需要记住一点,宏是使用VBA编写的一段代码片段。
学习ExcelVBA有什么用处?
前面我们说到,Excel中,VBA几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与Office其他软件交互,甚至与操作系统交互实现复杂的功能,VBA几乎都可以胜任。
以下是ExcelVBA几个典型的用途。
节省时间:只需一次点击就可以重复执行任意数量的操作。
例如,现在要新建20个工作表,手动操作可能需要一分钟的时间。
使用VBA只需一秒即可。
自动化任务:只需一次点击就可以按预先设置好的步骤,自动完成操作。
例如,插入一个图表并设调整格式,根据其复杂程度,可能需要多达几分钟时间。
而使用VBA编写调整步骤,一次点击,几秒内即可完成所有的操作。
减少错误:相比于手动操作出现的错误,只要正确编写VBA代码,执行过程中就不会出现错误。
例如,从一区域中筛选指定数据,并复制到另外一个位置,手动操作可能会出现漏选的可能。
但是使用VBA,极短的时间内正确无误的完成操作。
与其他软件交互:使用VBA,可以在Excel里创建、更新Word、PPT等文件。
还可以与系统交互,做到复制、移动、重命名其他文件等操作,无需打开其他文件。
ExcelVBA基础
ExcelVBA中的10个基本概念(熟悉VBA中的基本概念)
启用Excel开发工具教程(准备VBA开发工具)
如何打开ExcelVBA编辑器?(三种方法打开编辑器)
ExcelVBA设置宏安全性(正确设置VBA开发安全选项)
Excel保存包含VBA代码的工作簿(使用指定类型保存含VBA代码的工作簿)
使用VBA编辑器进行ExcelVBA开发(熟悉VBA开发工具的用法)
编写你的第一个VBA宏(基础实战练习)
Excel录制宏并查看宏代码(写VBA代码的技巧)
Excel中如何运行VBA代码?(从工作表运行VBA代码)
VBA变量、类型、运算符
VBA变量基础教程(VBA核心概念)
VBA常量基础教程(基础概念)
VBA运算符基础教程(加减乘除+高级操作)
VBA数据类型基础教程(程序更高效、更精准)
VBA程序结构
VBA程序结构入门(认识VBA程序骨架)
VBA表达式和语句(最基本的程序单元)
VBA变量的声明和赋值(是程序动起来)
VBA程序顺序结构(VBA程序默认执行顺序)
VBA程序选择结构(选择性的执行VBA代码)
VBA程序循环结构(重复执行一段代码)
VBAWith结构(简化程序书写)
VBAGoTo结构(程序之间跳转执行)
VBA注释教程和实例(使程序更容易阅读和理解)
VBA过程和函数(Sub|Function)
VBA过程(Sub)入门教程和实例(组织代码的容器)
VBA函数(Function)入门教程和实例(重复使用相同代码)
VBA函数与过程的6个不同点(正确使用过程和函数)
VBA过程和函数:传递参数教程和实例(正确定义和调用带参数的过程和函数)
VBA中ByVal和ByRef的基础用法和区别(学会正确传递参数)
VBA变量作用域
VBA过程或函数作用域
Label
{}
[+]
昵称*
邮箱(选填)
Label
{}
[+]
昵称*
邮箱(选填)
193评论
最新
最旧
最多投票
内联反馈
查看所有评论
hsdhlxy
1天前
可以用vba自动生成产品检验报告吗,一次生成多个不同的报告
0
回复
作者
懒人Excel
29秒前
回复给
hsdhlxy
可以的,只要数据和规则制定好,就可以一次性执行多个动作,也就可以生成多个报告。
具体可以微信咨询(office-guy)
0
回复
zzz
13天前
来催更了!
1
回复
c5z
21天前
pure,good,butnogongzhonghao?
1
回复
作者
懒人Excel
21天前
回复给
c5z
havegongzhonghao,justsearch[懒人Excel]inwechat
4
回复
stv
7天前
回复给
懒人Excel
geizhegehuifudianzan,lol
1
回复
小枫*
29天前
我还以为作者不更新了
0
回复
mao
29天前
还不更新
0
回复
shandongma
1月前
期待excel对象的讲解
2
回复
余风*
1月前
通俗易懂,写的真是不错!!
0
回复
simao
1月前
请问,是不是还没完?ByVal和ByRef对对象的差异还没讲呢
0
回复
作者
懒人Excel
1月前
回复给
simao
还没完,后面会更新
1
回复
昵称*
1月前
咱么用宏调用excel表里面的数据呀
0
回复
作者
懒人Excel
1月前
回复给
昵称*
暂时没有详细介绍的,后面将持续增加
0
回复
地狱慈悲
1月前
给变量赋值,必须在Sub里或者Function中么,例如:
OptionExplicit
PublicwsAsSheets
Setws=Sheet1
PublicP2AsDouble
P2=ws.Cells(2,3)
Subtext()
ws.Cells(2,3)=3
MsgboxP2
EndSub
这样在过程之外赋值就不行。
0
回复
作者
懒人Excel
1月前
回复给
地狱慈悲
是的,VBA会弹出【无效的外部过程】编译错误。
0
回复
照亮全世界
1月前
同一网络下,你这网址为啥有的电脑能打开,换另一台电脑就打不开了呀?昨天还能打开的今天就不行了。
0
回复
作者
懒人Excel
1月前
回复给
照亮全世界
可能是服务器的问题,访问的人多了,服务器开始吃力了。
后面考虑升级一下
1
回复
mcmugquan
2月前
请问excel获取网站多页数据需要学习什么知识,这里有教程吗?
0
回复
作者
懒人Excel
1月前
回复给
mcmugquan
本站暂时没发布相关内容。
如果目标网站的数据是以json形式返回,可以以VBA+JSON关键词搜索一下相关内容;如果是普通的HTML内容,以VBA+网页关键词搜索一下。
0
回复
wangyou
2月前
可以做excel报表吗
0
回复
作者
懒人Excel
2月前
回复给
wangyou
可以做啊,而且VBA做报表更强大
0
回复
gdstyjjtgs
2月前
很好,再次学习了。
0
回复
简初牛宝宝
2月前
大神,怎么在excel中每一行单独实现累积相加,已经设置迭代计算,但在C3输入一后,D2数值会变化,我想相互独立
0
回复
作者
懒人Excel
2月前
回复给
简初牛宝宝
需求描述的不是很清楚,可以结合实际的单元格区域结构具体说一下需求吗?
0
回复
GEN3
2月前
请问怎么自动根据项目编号日期+四位序号生成“单据编号”
0
回复
作者
懒人Excel
2月前
回复给
GEN3
这个需求中,编号和日期是固定的,核心是四位序号。
为了保证生成的单据编号的唯一性,需要生成当天内的四位唯一数字。
一个思路是,每次生成四位数,用countif函数数当天的单据,基础上+1处理;
0
回复
Sobliu
2月前
请问怎么从Word导入指定内容到Excel
1
回复
作者
懒人Excel
2月前
回复给
Sobliu
这个应该是可以做到,但是我目前还没有研究Word的对象模型,后续看情况出WordVBA系列文章。
1
回复
QIQI
2月前
请问要如何撰写成绩排名的代码?
0
回复
作者
懒人Excel
2月前
回复给
QIQI
可以说一下具体的需求吗?数据结构是怎么样的?
0
回复
qafqfc
2月前
还更新吗!
0
回复
作者
懒人Excel
2月前
回复给
qafqfc
更新更新
7
回复
哪里有砖去哪里
3月前
赞赞赞,一口气看完啦!期待更新!!!
3
回复
简生2
3月前
一口气看完vba,看着发现后面没了,大佬加油!!!
1
回复
云海*
3月前
我的电脑在下载《EXCEL数据地图》,显示“未安装VBA支持库,无法运行文档中的宏。
”请问这个怎么解决。
0
回复
作者
懒人Excel
3月前
回复给
云海*
安装时可能没有安装VBA环境。
重装一下Office,过程如果出现安装选项,记得把VBA环境也勾上。
0
回复
云海*
3月前
VBA这个需要下载,是什么东西,这个怎么下载,
0
回复
作者
懒人Excel
3月前
回复给
云海*
VBA是Office自带的,安装时需要一起安装。
0
回复
mli
3月前
大佬写得很好,感谢+膜拜。
求更新,谢谢大佬
1
回复
胖虎1
3月前
快更新,快更新,我都快看完了
2
回复
RangerShaw
3月前
非常清晰好用催更催更~
2
回复
christine_ss
3月前
谢谢大佬非常有用期待更新!
2
回复
肥霜1
3月前
感谢大佬,麻烦问一下有考虑过WordVBA的教学吗
0
回复
作者
懒人Excel
3月前
回复给
肥霜1
WordVBA也在计划之中,不过可能需要先把ExcelVBA差不多写完。
2
回复
云海*
3月前
回复给
懒人Excel
我的Excel说没有下载VBA,这个需要购买么
0
回复
作者
懒人Excel
3月前
回复给
云海*
安装时可能没有安装VBA环境。
重装一下Office,过程如果出现安装选项,记得把VBA环境也勾上。
0
回复
ggwz
4月前
大佬真棒!对于小白来说真是通俗易懂的教程!
1
回复
只为好玩
4月前
真不错,系统清晰明了,催更催更,希望可以用实践来验证
1
回复
notgay
4月前
通俗易懂!催更!
1
回复
到此一游
4月前
大佬快分享~支持
1
回复
Sean
4月前
大佬还会有更新吗?
2
回复
作者
懒人Excel
4月前
回复给
Sean
会更新的,快了
8
回复
春野谢大脚
4月前
看到大家都这么努力,说实话,以前这些东西上学基本都没人教过,也没意识学这些.直到工作才发现这些应该从小就开始接触。
加油,感谢作者的分享。
2
回复
菲尔*
4月前
站长你好vba部分可以提供一点关于excel单元格或者sheet的内置方法的讲解吗
0
回复
作者
懒人Excel
4月前
回复给
菲尔*
收到。
下一步将增加Excel对象模型即相关属性、方法的内容
0
回复
aegis
4月前
站长你好,我野路子修修补补写代码,碰到一个很疑惑的问题。
因为我们公司软件生成的excel文件有缺陷,其中无规律的会在空白单元格,写入一些不显示的东西。
具体就是如果你用COUNTA去统计,就会发现函数把假空白单元格统计进去了。
你去双击这个假空白单元格,什么也不操作,F2退出单元格,函数又不会统计这个假空白单元格了。
这个空白单元格就变成真空白了。
上面的情况倒是影响不大,真正疑惑的一点是下面的情况。
因为上面那个问题,所以我在用VBA的时候刻意回避这个问题。
我在统计实际数据总行数时,使用的是COUNTIF(“A:A”,”?*”)。
想法就是,至少单元格里有一个正儿八经的字符匹配,就算一行有效数据。
结果我发现COUNTIF用”?*”判断的话,在我实际运行过程中,居然不能识别纯数字。
在VBA里用COUNTA反而不会被假空白单元格所影响,我就感觉非常的神奇。
COUNTIF的情况我还可以猜测,可能是因为”?*”匹配的是文本,默认表格里纯数字格式对不上?这里如果还是想用COUNTIF,究竟是什么问题,能怎么修正呢?
0
回复
guhuashan
4月前
回复给
aegis
一个简便的处理方法:选中准备统计的列,执行“数据”-“分列”,然后一直“下一步”,完成以后再用COUNTA去统计就好了。
(解释一下:分列这个步骤看似什么也没做,其实是让选中列里的单元格重新运算了一遍,等价于“每个单元格进入然后退出编辑模式”)
0
回复
作者
懒人Excel
4月前
回复给
aegis
能否发一份有问题的工作簿,我这种有问题有可能是Excel本身的bug,或者有些从数据库导入的不可见字符不好分辨。
[email protected]
1
回复
小曾*
4月前
您好,请问excel如何可以判断一个单元格里面不同关键词,然后返回不同结果
1
回复
作者
懒人Excel
4月前
回复给
小曾*
使用Range读取单元格内容,然后使用IF语句或SELECT语句判断不同的关键词,再返回对应的结果即可。
具体用法请查看对应的介绍文章。
0
回复
Jerry
5月前
老大,VBA的模块继续增加内容吧。
3
回复
作者
懒人Excel
5月前
回复给
Jerry
快了快了
6
回复
大宝徐
5月前
请问下,word当中表格里面有合并单元格,既有水平方向,也有垂直方向的,它的行数和列数是怎么来的,有些单元格访问不到。
请问如何遍历所有的单元格呢?
0
回复
作者
懒人Excel
5月前
回复给
大宝徐
我研究研究
0
回复
lifeisshort
5月前
回复给
懒人Excel
作者讲得很好!!!可不可以专门出几期在word里面的应用啊,比如指定格式,pdf转换这种,虽然一个文档不难,但是工作中经常会遇到批量处理文档这种情况。
我感觉实际用处应该会挺大的
0
回复
作者
懒人Excel
5月前
回复给
lifeisshort
可以可以,学VBA就是为了要实际应用嘛。
也欢迎把具体的需求发给我,这样更容易去写对应的程序。
0
回复
大宝徐
5月前
回复给
懒人Excel
我现在想到的就是加上onerrorresumenext,基本能解决问题
fori=1totable.rows.countstep1
forj=1totable.columns.countstep1
onerrorresumenext
//todosomethinghere
nextj
nexti
0
回复
作者
懒人Excel
5月前
回复给
大宝徐
这个方法我也试了一下,但是对于合并类区域,读取内容不完整或重复。
另外,onerrorresumenext是不是应该放在循环开始前?
0
回复
大宝徐
5月前
word表格里面有合并的单元格,既有行合并的单元格,也有列合并的单元格,我要怎么样遍历所有单元格呢?
1
回复
作者
懒人Excel
5月前
回复给
大宝徐
这个需要查看Word里的表格对象,目前我还没有找到对应的方法
0
回复
noalias
5月前
大佬,关于省略引用有没有好的总结?有时候在模块中创建的过程中对象省略引用,在工作表中调用就容易报错。
还有个迷惑的地方,将一个range赋值给variant变量,该变量可作为一个数组使用,但用join函数操作该数组就会报错
最后由noalias编辑于5月前
0
回复
作者
懒人Excel
5月前
回复给
noalias
1、省略引用,用的不仔细,确实容易出现错误。
建议引用时尽量指定其父对象,使用with结构简化代码结构;
2、从range赋值给variant变量的数组有一个特点,【读取的数组始终是二维数组,无论单元格区域是单一行或列(单个单元格除外)】,所以这里不能直接使用join函数。
0
回复
Stena
5月前
跪求博主分享一些类似合并拆分类的案例讲解~~
0
回复
作者
懒人Excel
5月前
回复给
Stena
收到,尽快添加
1
回复
大东东
5月前
exclevba好多方法,有API或者网站可以查询没
0
回复
作者
懒人Excel
5月前
回复给
大东东
官方手册目前是最全的,https://docs.microsoft.com/en-us/office/vba/api/overview/
我们准备最近推出课程和手册,可以关注一下。
0
回复
小菜菜
5月前
回复给
懒人Excel
关注是公众号懒人Excel吗?
0
回复
大东东
5月前
回复给
小菜菜
官网看了还行就是没有离线的帮助文档
0
回复
作者
懒人Excel
5月前
回复给
小菜菜
是的
0
回复
微微*
6月前
这些是全部么?已经更新完了?
0
回复
作者
懒人Excel
5月前
回复给
微微*
远远没有,在梳理各种知识点,争取尽快更新
1
回复
大宝徐
6月前
工作中碰到vba操作word文档,想要修改项目编号列表中的数字,比如4.5.1改成4.3.5之类的,有办法吗?
0
回复
作者
懒人Excel
6月前
回复给
大宝徐
应该是可以的,涉及到Word中对应的对象操作。
具体可以发个附件和详细描述,我看一下
0
回复
大宝徐
5月前
回复给
懒人Excel
已经搞定了,我直接强制改了。
0
回复
COCO
6月前
我想问一下,如何在Excel表格内设置一个VBA可以将同文件夹内的TXT类型文件内的数据整理到Excel表格内
是多个TXT文件,不是单个的哦
最后由COCO编辑于6月前
0
回复
作者
懒人Excel
6月前
回复给
COCO
是可以做到的,涉及到文件系统访问、TXT文件读取、基础遍历等。
后期整理一下需求和代码,再发布。
1
回复
COCO
6月前
回复给
懒人Excel
谢谢啦,可以的话具体操作可以有个SOP吗?
0
回复
作者
懒人Excel
6月前
回复给
COCO
争取写一个详细的教程
1
回复
Coral
7月前
每一种语言或工具都有核心或精华,比如C语言精华就是类,请问您认为VBA的精华是什么?
1
回复
作者
懒人Excel
7月前
回复给
Coral
以我的学习过程和使用经验,VBA的核心特点是【免部署,拿来即用】,这也正适合广大上班族,不用折腾各种配置,打开一个Office文件,录制一个宏,就可以运行,看到效果了。
如果能初步掌握并使用,可以成为力压其他人的一个技能了。
更进一步,熟练使用的阶段,就是一个办公神器。
当然,这样并不是说VBA没有缺点,其实缺点一大堆,但是架不住方便啊。
自己写的代码,发给其他人一样可以运行,不需要额外的工作
6
回复
Coral
7月前
回复给
懒人Excel
多谢。
我以为是对象。
毕竟VBA的语法简单,掌握了如何操作对象,就基本上可以搞定很多问题了。
0
回复
爱说实话
6月前
回复给
Coral
毛*啊,我觉得VBA语法超级复杂,就函数过程的subendsub,还有返回值和其它语言比弱爆了,啰里啰唆,哪里简单?超级复杂无用。
你看看python,java,那个函数定义写这么多废话。
也就是excel原生支持VBA没办法了,
1
回复
作者
懒人Excel
6月前
回复给
爱说实话
语言能力方面,VBA确实有其局限性。
但是论其复杂性,VBA的复杂性我感觉还好。
VBA相对来说用的人不够多,网上对应的资料少,给人感觉有问题不好找到答案,因此给人感觉很复杂。
0
回复
作者
懒人Excel
7月前
回复给
Coral
这样说也没有问题,语言层面肯定是对象是核心。
0
回复
Coral
6月前
回复给
懒人Excel
多谢回复。
期待更新。
0
回复
Coral
7月前
有的篇章并没有在上面的列表里,如’如何打开ExcelVBA编辑器?’(从其他篇章的尾部链接进入的)。
是不是它已经包含在上述列表的某个篇章里了,如’使用VBA编辑器进行ExcelVBA开发‘?
0
回复
作者
懒人Excel
7月前
回复给
Coral
感谢提醒,已添加到总列表
1
回复
Coral
7月前
在VBA里写的所有不带参数的过程,都会自动产生一个对应的Macro?而带参数的子过程和函数(不管带不带参数),则不会自动产生一个对应的Macro?
另外,以学完所有篇章,期待后续更新,尤其是对象。
写的很棒。
非常感谢。
0
回复
作者
懒人Excel
7月前
回复给
Coral
针对过程,macro列表中,无参数的显示,有参数的不显示。
针对函数,有没有参数都可以在单元格内使用。
当然,以上均是默认作用域(public)下,其他作用域还得另当别论。
另外,这里vba过程或函数不会“产生”macro,那里只是过程的列表。
0
回复
Coral
7月前
回复给
懒人Excel
是的,我想错了。
不是产生,是显示在macro列表中。
那么可以认为无参数的过程就等同于macro?
0
回复
作者
懒人Excel
7月前
回复给
Coral
不完全是,还要考虑过程的作用域问题。
只有过程是全局作用域,才会显示在macro列表。
除了全局作用域,过程还有模块作用域和工程作用域。
默认是全局作用域,因此给人印象只有无参数就会显示在macro列表中。
模块作用域,过程使用private关键字声明;工程作用域,public关键字声明,并且在模块顶部添加optionprivatemodule修饰语句。
1
回复
Coral
7月前
回复给
懒人Excel
专业!高手。
回复的很全面。
0
回复
eric
7月前
有没有防止vba被查杀的方法
0
回复
作者
懒人Excel
7月前
回复给
eric
没遇到过这种情况,可以详细说一下什么情形下被查杀的吗?结果是什么?
0
回复
加载更多评论
搜索:
1930希望看到您的想法,请您发表评论x()x|回复Insert
延伸文章資訊
- 1Chapter 01 EXCEL VBA 程式設計基本介紹
VBA巨集語言指的就是Visual Basic For Application,. 主要用做設計Office 應用程式中的自訂功能及自動. 化而設計。 在應用程式中,若包含了VBA程式語言的話,程式.
- 2別再做Excel苦工!6 張圖學會「巨集」功能 - 數位時代
提到程式,很多人就會覺得困難,但Excel VBA是透過錄製巨集產生程式碼,讓電腦幫忙寫程式,和傳統的程式語言(C或Java)相比,在學習路線上會更容易。本文 ...
- 3快速入門: 建立巨集
如果您的工作Microsoft Excel重複執行,您可以錄製巨集以自動化那些工作。 宏是一種動作或一組動作,您可以盡可能執行多次。 當您建立宏時,會錄製滑鼠按一下和按鍵。
- 4Excel VBA 入门到精通详细教程
懒人Excel 将分享一系列Excel VBA 入门到精通详细教程,帮助读者入门,并逐步提高,应用于自己的 ... 另外,这里vba过程或函数不会“产生”macro,那里只是过程的列表。
- 5玩轉數據與資料:Excel VBA 入門教學 - Hahow
此外,多數課程可能是進行單一教學,舉凡:迴圈、判斷式、基本函數等,而本堂課程,將會針對「多迴圈+多判斷式+巨集」等多種功能彙整的範例程式碼進行教學。