在 Excel 众多的概念中,VBA 是最重要也是最难学的一部分。如果涉及到数据处理工作,VBA 几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与 Office 其他软件交互,甚至与操作系统交互实现复杂的功能,VBA 几乎都可以胜任。
那么什么是 Excel VBA,如何学习它,懒人Excel 带你进入 VBA 的世界,从最基础的部分开始讲起,一步一步入门到精通,写出自己的 VBA 程序。
什么是 Excel VBA?
首先,第一个问题,什么是 VBA?
Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft Office软件。
以上是 VBA 的百科定义,说简单点,VBA 是运行在 Microsoft Office 软件之上,可以用来编写非软件自带的功能的编程语言。Office 软件提供丰富的功能接口,VBA 可以调用它们,实现自定义的需求。基本上,能用鼠标和键盘能做的事情,VBA 也能做。
正如前文所述,VBA 可以运行在 Office 软件上,包括 Excel、Word、PPT、Outlook 等。VBA 语言在 Office 软件中是通用的,基本语法和用法都相同。但是每一个软件具有自己独有的对象,例如 Excel 有单元格对象,Word 有段落对象,PPT 有幻灯片对象。
回到 Excel VBA,用它可以编写自定义函数,插入任意图表、批量处理大量数据单元格,编写插件自动化工作。甚至可以编写基于 Excel 的复杂的管理系统,其功能可以媲美桌面软件。
在本系列教程中,我们学习 VBA 语言语法和 Excel 特有的对象的使用。在往后的教程中,如没有特殊说明,文章提到的 VBA 指的是 Excel VBA。
VBA 与宏有什么区别?
在学习 VBA 过程中,经常会出现一个说法,「宏」。简单的说,宏是一段可以运行的 VBA 代码片段,也可以说是一个简称,并没有特别的不同之处。所以学习 VBA 时,不用纠结于两者到底有什么区别,只需要记住一点,宏是使用 VBA 编写的一段代码片段。
学习 Excel VBA 有什么用处?
前面我们说到,Excel 中,VBA 几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与 Office 其他软件交互,甚至与操作系统交互实现复杂的功能,VBA 几乎都可以胜任。以下是 Excel VBA 几个典型的用途。
- 节省时间:只需一次点击就可以重复执行任意数量的操作。例如,现在要新建 20 个工作表,手动操作可能需要一分钟的时间。使用 VBA 只需一秒即可。
- 自动化任务:只需一次点击就可以按预先设置好的步骤,自动完成操作。例如,插入一个图表并设调整格式,根据其复杂程度,可能需要多达几分钟时间。而使用VBA编写调整步骤,一次点击,几秒内即可完成所有的操作。
- 减少错误:相比于手动操作出现的错误,只要正确编写 VBA 代码,执行过程中就不会出现错误。例如,从一区域中筛选指定数据,并复制到另外一个位置,手动操作可能会出现漏选的可能。但是使用 VBA,极短的时间内正确无误的完成操作。
- 与其他软件交互:使用 VBA,可以在 Excel 里创建、更新 Word、PPT 等文件。还可以与系统交互,做到复制、移动、重命名其他文件等操作,无需打开其他文件。
Excel VBA 基础
- Excel VBA 中的 10 个基本概念(熟悉 VBA 中的基本概念)
- 启用 Excel 开发工具教程(准备 VBA 开发工具)
- 如何打开 Excel VBA 编辑器?(三种方法打开编辑器)
- Excel VBA 设置宏安全性(正确设置 VBA 开发安全选项)
- Excel 保存包含 VBA 代码的工作簿(使用指定类型保存含 VBA 代码的工作簿)
- 使用 VBA 编辑器进行 Excel VBA 开发(熟悉 VBA 开发工具的用法)
- 编写你的第一个 VBA 宏(基础实战练习)
- Excel 录制宏并查看宏代码(写 VBA 代码的技巧)
- Excel 中如何运行 VBA 代码?(从工作表运行 VBA 代码)
VBA 变量、类型、运算符
- VBA 变量基础教程(VBA 核心概念)
- VBA 常量基础教程(基础概念)
- VBA 运算符基础教程(加减乘除+高级操作)
- VBA 数据类型基础教程(程序更高效、更精准)
VBA 程序结构
- VBA 程序结构入门(认识 VBA 程序骨架)
- VBA 表达式和语句(最基本的程序单元)
- VBA 变量的声明和赋值(是程序动起来)
- VBA 程序顺序结构(VBA 程序默认执行顺序)
- VBA 程序选择结构(选择性的执行 VBA 代码)
- VBA 程序循环结构(重复执行一段代码)
- VBA With 结构(简化程序书写)
- VBA GoTo 结构(程序之间跳转执行)
- VBA 注释教程和实例(使程序更容易阅读和理解)
VBA 过程和函数 (Sub | Function)
- VBA 过程(Sub) 入门教程和实例(组织代码的容器)
- VBA 函数(Function)入门教程和实例(重复使用相同代码)
- VBA 函数与过程的 6 个不同点(正确使用过程和函数)
- VBA 过程和函数:传递参数教程和实例(正确定义和调用带参数的过程和函数)
- VBA 中 ByVal 和 ByRef 的基础用法和区别(学会正确传递参数)
- VBA 变量作用域
- VBA 过程或函数作用域
不到一天时间学完了,真过瘾,作者有其他平台博客吗?
有公众号,欢迎关注
怎么关注你呢
欢迎关注公众号
感谢分享
求更新
求适合财务的各种图表制作教程
目前还没有,后续可能会分享,欢迎关注。
大佬,为啥我无法在VBA内输入中文呀?
具体提示的错误是什么?
非常棒,点赞!
大佬讲的浅显易懂,有相关vba的书籍和课程推荐吗?本人财务一枚,平时用excel比较多,但是初次接触vba。
请关注我们的课程【VBA 入门课程】
写的很好,大神为什么不更新了,数组什么的好像还没讲
确实,还有不少内容,后面会再分享,欢迎关注。
因为用得比较少,现在也在整理VBA笔记,作者可以把VBA的函数,对象Application属性等常用代码写一下,方便查阅.
好建议
感谢大神
寒江烟火、江湖故人,相逢何必曾相识
老师 继续更新下 数组+字典还没讲 再开个模块 加下案例就更好了
请问下IT小白学习这个会不会有非常大的困难,作为一名财务从业者,真的非常多这样的需求
我个人觉得相对其他编程语言,VBA更适合IT小白。相对少的语法,结合Excel/Word/PowerPoint对象模型提供的能力,快速实现具体的需求。
教程写得太好了,浅显易懂,其他编程语言如果都像老师这么写的话,何愁学不会!
对于C程序员而言非常简洁易懂,感谢!就是不知道怎么调用vba和excel内置的方法。
VBA内置函数可以直接书写函数名就能调用。Excel的内置函数,通过Application对象调用,具体为:Application.WorksheetFunction.函数名(对应参数)
大佬能给一些练习题吗
后续会推出专门的练习题项目,欢迎关注。
作者写的很好啊,用时2个小时看完了,很深的逻辑,让作者写的很易懂,漂亮,大大的赞
请问,怎么通过EXCEL访问数据库内容,写好代码后,只在excel中刷新数据即可的那种
需求不是很明确。要看哪一种数据库,如果Access数据库,本身支出通过VBA操作,其他数据库需要配置多一点。
Access VBA请参考官方文档:Access VBA reference
PLSQL,内部不能联互联网的电脑
感谢!真的很有用,建议作者大大搞几个由简入深的练习题
求助!领导要求在某客户投诉问题解决时间至今,以30天为一个周期,每个周期往后顺延一天,统计这个时间段内满足“该客户又出现5次以上的投诉”条件的周期总个数。(例:解决时间是2023年1月1日至2023年2月10日,1月1日-1月30日为一个周期,1月2日-1月31日为一个周期,这个时间段共有11个周期,统计满足每周期内出现5次以上投诉的周期总数)这个可以用VBA实现吗?怎么实现呢?求助作者大大
需求比较明确,再进一步确认后应该是可以实现。如果想找我们协助(咨询定制是收费项目),可以加微信office-guy
求更新,写的很好
求助!我的同事在EXCEL里面镶嵌了n个excel。怎样通过VBA把它们提取出来?
这个我先研究研究
写的真好,配合实例简明易懂
怎么具体操作单元格呢,例如拼接,提取,格式化等
1、熟悉程序运行结构,循环、判断等:VBA 程序结构入门
2、了解运算符的使用:VBA 运算符基础教程
3、结合VBA内置提供的各类文本函数,对单元格内容进行操作(这类函数后续会介绍用法)
什么时候介绍啊!等的花儿都谢了
今年结束前开始更新
作者厉害!一口气看完了。软件语言都差别不是很大,语法形式上面稍有差别。
把本站关于VBA的文章看完 是不是可以写一些基本的excel批量化操作的宏?
感谢建议,后续陆续后发布更多文章,欢迎关注
感谢感谢,言简意赅,又条理清晰,有概念有程序例子,对于入门了解基础很有用,谢谢!
请问下,有练习题,能实战的
目前没有的,不过有计划推出一些练习题系列的,欢迎关注
作者大大,求一期有关文件定位与文件导入文章!?感谢!!!
可以的,需求可以进一步说一下吗?文件的位置、格式、导入需求等
就是可以把一个文件夹的全部Excel文件导入到一个工作表中的那种,感觉是要用到文件定位的一些,就比如ThisWorkbook函数。这一块感觉可能都用的蛮多的。
明白,那就是多工作簿数据汇总问题。争取尽快写一篇出来,感谢建议
作者大大加油,期盼中
写的挺好,加油 继续。随着深入 可以结合一些有一定功能的实例 增加学习的成就感。
感谢关注,我们后续会继续优化的
刚开始了解
最近两天开始学,有点编程基础学习还是很快的,主要作者写的很棒,再结合实践2,感觉学习乐趣也有!
作者写的真的很好,深入浅出,非常适合VBA的入门,强烈安利!!可惜这里没法一键三连,不然一定一键三连一下!!
感谢支持,会更加努力
大佬是不打算更新了吗?
要更新的,感谢关注
大佬 你还在更吗?已经到最后一章了
Set vFetch = New CLS_Fetch是有什麽用途的呀,之後怎麽調用呢
CLS_Fetch 应该是自定义的类模块,在这里创建了一个新的类模块,并赋值到vFetch变量。
下一步就是通过这个变量调用类模块的属性、方法、事件等成员,实现自己的需求。
大佬,受累能否指导下,根据一个单元格内数据发生变化时,根据当前列的公式,生成新的一列新的数据,用来记录每次发生变化后的数据,代码该怎么写?
因为没有具体的数据分布,这里讲一下思路:
1、通过工作表的Worksheet_Change事件来监视单元格的变化;
2、如果是目标单元格的值发生变化了,执行下一步;
3、这时含公式的列数据已经发生变化了,通过单元格value属性,将新的值复制到新的列。
4、记住新的列的列号,下一次复制新列时,列号+1
厉害
这咋看着看着就没啦
抱歉,后面会持续更新的
催更啊加油啊大佬
如果A2等于2,则A1、A2字体为红色,B2等于2,则B1、B2字体为红色……怎样用VBA For处理这种条件格式的批量设置。
请参考如下代码,循环数量可自定义。
大佬,你好,我想问问,为什么我在excel表格里写的VBA宏代码保存了。我关闭excel表格后,重新打开表格,代码就么有了,并且另存为.xlsm表,也不能引用,这是为什么啊,我要怎么才能每次打开excel表格,写的vba宏代码都是存在的。谢谢大佬
建议先保存为xlsm格式,再编写代码。另外,如果使用录制宏方式生成的代码,第一步选择保存在当前工作簿。
Sub SelectRange()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet1”)
Dim rng As Range
Set rng = ws.Range(“A1:F10”)
rng.Select
End Sub
这个为什么会报错的,是什么原因呢,望解答
在调用单元格对象的 Select 方法之前,需要先激活单元格所在的工作表。
因此这个代码运行时,当前工作表可能不是 Sheet1,因此需要先激活,在rng.Select前添加以下代码:
ws.Activate
求从一个工作表提取不同的数据分别导入两个表里的代码
使用Worksheet对象的Range对象可以获取指定单元格的值,再写回到其他工作表的指定单元格,具体用法请参考:
https://learn.microsoft.com/zh-cn/office/vba/api/excel.range(object)
想问一下,除了那些教程,有没有实际操作的例子能分享一下?
好呢,后续会分享实际例子
好,很好
在网上找了很多VBA教程,这个网站的,是我遇到的写的最好的,感谢!
不孬。
全面,精彩
叙述清晰,排版美观!本文目录这些文章一口气看完了,很有收获,感谢作者!
通过使用VBA制作宏,实现Excel十字光标,接触到VBA,感觉非常Nice,值得学习一下子,本网址介绍的太好了,非常详细,非常棒
很实用啊,谢啦
等后续更新啊讲讲数组和对象,秋梨膏~!
宝藏网站呀,赞赞赞!