在 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自动生成产品检验报告吗,一次生成多个不同的报告
可以的,只要数据和规则制定好,就可以一次性执行多个动作,也就可以生成多个报告。具体可以微信咨询(office-guy)
来催更了!
pure,good,but no gong zhong hao?
have gong zhong hao , just search [懒人Excel] in wechat
gei zhe ge hui fu dian zan, lol
我还以为作者不更新了
还不更新
期待excel对象的讲解
通俗易懂,写的真是不错!!
请问,是不是还没完? ByVal和ByRef对对象的差异还没讲呢
还没完,后面会更新
咱么用宏调用excel表里面的数据呀
暂时没有详细介绍的,后面将持续增加
给变量赋值,必须在Sub里或者Function中么,例如:
Option Explicit
Public ws As Sheets
Set ws = Sheet1
Public P2 As Double
P2 = ws.Cells(2,3)
Sub text()
ws.Cells(2,3) = 3
Msgbox P2
End Sub
这样在过程之外赋值就不行。
是的,VBA会弹出【无效的外部过程】编译错误。
同一网络下,你这网址为啥有的电脑能打开,换另一台电脑就打不开了呀?昨天还能打开的今天就不行了。
可能是服务器的问题,访问的人多了,服务器开始吃力了。后面考虑升级一下
请问excel获取网站多页数据需要学习什么知识,这里有教程吗?
本站暂时没发布相关内容。
如果目标网站的数据是以json形式返回,可以以VBA+JSON关键词搜索一下相关内容;如果是普通的HTML内容,以VBA+网页关键词搜索一下。
可以做excel报表吗
可以做啊,而且VBA做报表更强大
很好,再次学习了。
大神,怎么在excel中每一行单独实现累积相加,已经设置迭代计算,但在C3输入一后,D2数值会变化,我想相互独立
需求描述的不是很清楚,可以结合实际的单元格区域结构具体说一下需求吗?
请问怎么自动根据项目编号日期+四位序号生成“单据编号”
这个需求中,编号和日期是固定的,核心是四位序号。为了保证生成的单据编号的唯一性,需要生成当天内的四位唯一数字。
一个思路是,每次生成四位数,用countif函数数当天的单据,基础上+1处理;
请问怎么从Word导入指定内容到Excel
这个应该是可以做到,但是我目前还没有研究Word的对象模型,后续看情况出Word VBA 系列文章。
请问要如何撰写成绩排名的代码?
可以说一下具体的需求吗?数据结构是怎么样的?
还更新吗!
更新更新
赞赞赞,一口气看完啦!期待更新!!!
一口气看完vba,看着发现后面没了,大佬加油!!!
我的电脑在下载《EXCEL数据地图》,显示“未安装VBA支持库,无法运行文档中的宏。”请问这个怎么解决。
安装时可能没有安装VBA环境。重装一下 Office,过程如果出现安装选项,记得把VBA环境也勾上。
VBA这个需要下载,是什么东西,这个怎么下载,
VBA 是 Office 自带的,安装时需要一起安装。
大佬写得很好,感谢+膜拜。
求更新,谢谢大佬
快更新,快更新,我都快看完了
非常清晰好用 催更催更~
谢谢大佬 非常有用 期待更新!
感谢大佬,麻烦问一下有考虑过Word VBA的教学吗
Word VBA 也在计划之中,不过可能需要先把Excel VBA差不多写完。
我的Excel说没有下载 VBA,这个需要购买么
安装时可能没有安装VBA环境。重装一下 Office,过程如果出现安装选项,记得把VBA环境也勾上。
大佬真棒!对于小白来说 真是通俗易懂的教程!
真不错,系统清晰明了,催更催更,希望可以用实践来验证
通俗易懂!催更!
大佬快分享~支持
大佬还会有更新吗?
会更新的,快了
看到大家都这么努力,说实话,以前这些东西上学基本都没人教过,也没意识学这些.直到工作才发现这些应该从小就开始接触。加油,感谢作者的分享。
站长你好vba部分可以提供一点关于excel单元格或者sheet 的内置方法的讲解吗
收到。下一步将增加Excel对象模型即相关属性、方法的内容
站长你好,我野路子修修补补写代码,碰到一个很疑惑的问题。
因为我们公司软件生成的excel文件有缺陷,其中无规律的会在空白单元格,写入一些不显示的东西。具体就是如果你用COUNTA去统计,就会发现函数把假空白单元格统计进去了。你去双击这个假空白单元格,什么也不操作,F2退出单元格,函数又不会统计这个假空白单元格了。这个空白单元格就变成真空白了。
上面的情况倒是影响不大,真正疑惑的一点是下面的情况。
因为上面那个问题,所以我在用VBA的时候刻意回避这个问题。我在统计实际数据总行数时,使用的是COUNTIF(“A:A”,”?*”)。想法就是,至少单元格里有一个正儿八经的字符匹配,就算一行有效数据。
结果我发现COUNTIF用”?*”判断的话,在我实际运行过程中,居然不能识别纯数字。在VBA里用COUNTA反而不会被假空白单元格所影响,我就感觉非常的神奇。COUNTIF的情况我还可以猜测,可能是因为”?*”匹配的是文本,默认表格里纯数字格式对不上?这里如果还是想用COUNTIF,究竟是什么问题,能怎么修正呢?
一个简便的处理方法:选中准备统计的列,执行“数据”-“分列”,然后一直“下一步”,完成以后再用COUNTA去统计就好了。(解释一下:分列这个步骤看似什么也没做,其实是让选中列里的单元格重新运算了一遍,等价于“每个单元格进入然后退出编辑模式”)
能否发一份有问题的工作簿,我这种有问题有可能是Excel本身的bug,或者有些从数据库导入的不可见字符不好分辨。
a1@lanrenexcel.com
您好,请问excel如何可以判断一个单元格里面不同关键词,然后返回不同结果
使用Range读取单元格内容,然后使用IF语句或SELECT语句判断不同的关键词,再返回对应的结果即可。具体用法请查看对应的介绍文章。
老大,VBA的模块继续增加内容吧。
快了快了
请问下,word当中表格里面有合并单元格,既有水平方向,也有垂直方向的, 它的行数和列数是怎么来的,有些单元格访问不到。请问如何遍历所有的单元格呢?
我研究研究
作者讲得很好!!!可不可以专门出几期在word里面的应用啊,比如指定格式,pdf转换这种,虽然一个文档不难,但是工作中经常会遇到批量处理文档这种情况。我感觉实际用处应该会挺大的
可以可以,学VBA就是为了要实际应用嘛。也欢迎把具体的需求发给我,这样更容易去写对应的程序。
我现在想到的就是加上on error resume next, 基本能解决问题
for i=1 to table.rows.count step 1
for j=1 to table.columns.count step 1
on error resume next
//to do something here
next j
next i
这个方法我也试了一下,但是对于合并类区域,读取内容不完整或重复。
另外,on error resume next是不是应该放在循环开始前?
word表格里面有合并的单元格,既有行合并的单元格,也有列合并的单元格,我要怎么样遍历所有单元格呢?
这个需要查看Word里的表格对象,目前我还没有找到对应的方法
大佬,关于省略引用有没有好的总结?有时候在模块中创建的过程中对象省略引用,在工作表中调用就容易报错。
还有个迷惑的地方,将一个range赋值给variant变量,该变量可作为一个数组使用,但用 join 函数操作该数组就会报错
1、省略引用,用的不仔细,确实容易出现错误。建议引用时尽量指定其父对象,使用 with 结构简化代码结构;
2、从range赋值给variant变量的数组有一个特点,【读取的数组始终是二维数组,无论单元格区域是单一行或列(单个单元格除外)】,所以这里不能直接使用join函数。
跪求博主分享一些类似合并 拆分类的案例讲解~~
收到,尽快添加
excle vba 好多方法,有API或者网站可以查询没
官方手册目前是最全的,https://docs.microsoft.com/en-us/office/vba/api/overview/
我们准备最近推出课程和手册,可以关注一下。
关注是公众号懒人Excel吗?
官网看了还行 就是没有离线的帮助文档
是的
这些是全部么?已经更新完了?
远远没有,在梳理各种知识点,争取尽快更新
工作中碰到vba操作word文档,想要修改项目编号列表中的数字,比如4.5.1改成4.3.5之类的,有办法吗?
应该是可以的,涉及到Word中对应的对象操作。具体可以发个附件和详细描述,我看一下
已经搞定了,我直接强制改了。
我想问一下,如何在Excel表格内设置一个VBA可以将同文件夹内的TXT类型文件内的数据整理到Excel表格内
是多个TXT文件,不是单个的哦
是可以做到的,涉及到文件系统访问、TXT文件读取、基础遍历等。后期整理一下需求和代码,再发布。
谢谢啦,可以的话具体操作可以有个SOP吗?
争取写一个详细的教程
每一种语言或工具都有核心或精华,比如C语言精华就是类,请问您认为VBA的精华是什么?
以我的学习过程和使用经验,VBA的核心特点是【免部署,拿来即用】,这也正适合广大上班族,不用折腾各种配置,打开一个Office文件,录制一个宏,就可以运行,看到效果了。
如果能初步掌握并使用,可以成为力压其他人的一个技能了。更进一步,熟练使用的阶段,就是一个办公神器。
当然,这样并不是说VBA没有缺点,其实缺点一大堆,但是架不住方便啊。自己写的代码,发给其他人一样可以运行,不需要额外的工作
多谢。我以为是对象。毕竟VBA的语法简单,掌握了如何操作对象,就基本上可以搞定很多问题了。
毛*啊,我觉得VBA语法超级复杂,就函数过程的sub end sub ,还有返回值 和其它语言比 弱爆了,啰里啰唆, 哪里简单? 超级复杂无用。 你看看python ,java , 那个函数定义写这么多废话。也就是excel 原生支持VBA没办法了 ,
语言能力方面,VBA确实有其局限性。但是论其复杂性,VBA的复杂性我感觉还好。VBA相对来说用的人不够多,网上对应的资料少,给人感觉有问题不好找到答案,因此给人感觉很复杂。
这样说也没有问题,语言层面肯定是对象是核心。
多谢回复。期待更新。
有的篇章并没有在上面的列表里,如’如何打开 Excel VBA 编辑器?’(从其他篇章的尾部链接进入的)。是不是它已经包含在上述列表的某个篇章里了,如’使用 VBA 编辑器进行 Excel VBA 开发‘?
感谢提醒,已添加到总列表
在VBA里写的所有不带参数的过程,都会自动产生一个对应的Macro? 而带参数的子过程和函数(不管带不带参数),则不会自动产生一个对应的Macro?
另外,以学完所有篇章,期待后续更新,尤其是对象。写的很棒。非常感谢。
针对过程,macro列表中,无参数的显示,有参数的不显示。
针对函数,有没有参数都可以在单元格内使用。
当然,以上均是默认作用域(public)下,其他作用域还得另当别论。
另外,这里vba过程或函数不会“产生”macro,那里只是过程的列表。
是的,我想错了。不是产生,是显示在macro列表中。那么可以认为无参数的过程就等同于macro?
不完全是,还要考虑过程的作用域问题。只有过程是全局作用域,才会显示在macro列表。
除了全局作用域,过程还有模块作用域和工程作用域。
默认是全局作用域,因此给人印象只有无参数就会显示在macro列表中。
模块作用域,过程使用private关键字声明;工程作用域,public关键字声明,并且在模块顶部添加option private module修饰语句。
专业!高手。回复的很全面。
有没有防止vba被查杀的方法
没遇到过这种情况,可以详细说一下什么情形下被查杀的吗?结果是什么?