![fd1cb74a61cf0d0f162fbbd95fee1d47.png](https://i-blog.csdnimg.cn/blog_migrate/2baed689e31678b7aa94bcc1d87e4653.jpeg)
编按:哈喽,大家好!前段时间和大家提到了让excel自杀的VBA代码,引起了不少小伙伴的讨论,都说想看部落窝分享更多关于excel中VBA的知识,别催别催,这不就来了吗。学习更多技巧,请收藏部落窝教育excel图文教程。
说在【前言】前面的话
如果你已经准备开始学习EXCEL VBA,或者看了此文后对学习EXCEL VBA有了丝丝兴趣,还想继续跟随作者“由浅入深”的学习VBA,那就在评论区留言“继续VBA!”,点一下“在看”、“关注”不迷路,你的“打Call”就是作者写作的动力。
【前言】
一座冰山浮出海面,我们看得到浮在海面以上的部分,还有一部分却是浸在海面以下的,如果不考虑海水的密度和水的密度的差异,那么“海面以上体积:海面以下的体积≈1:9”。在EXCEL中也有类似的一个比例,那就是“日常使用的知识:excel不会应用的知识”,但是这个比例大概有多少就不好说了,因为每个人掌握EXCEL的程度是不一样的,不敢说“九牛一毛”,但是大部分的同学还只是用到“皮毛而已”。当你有一天真正的运用到了VBA,才会对EXCEL的运行原理有更加透彻的理解和使用。
【正文】
VBA在EXCEL中本质上是对于操作对象的操作,是对被操作对象的各种属性和方法的运用,将日常我们需要手工操作或者函数引用的内容,编辑成VBA可以识别的语言,在触发条件下实现自动化运行的过程。下面我们就来介绍几种“RANGE(单元格区域)”时常会用到的操作。
一、SELECT属性
英语中SELECT被译作“选择、选定”的意思,也就是我们常说的“选中单元格区域”,下面举几个例子。
1.选择连续区域。例如,我们有一段代码如下:
Sub 选中单元格()
Sheets("select").Range("A1:D6").Select
End Sub
代码含义:选中《select》工作表的A1:D6单元格区域。
![9f4708eb7579074511fa9f44f8847732.gif](https://i-blog.csdnimg.cn/blog_migrate/d9a8ffb1ba9e25f635cdf13ee728f1e1.gif)
2.选择一个单元格。如果我们只需要执行选择一个单元格的操作,那可以按下面的写法处理,如下:
Sub 选中一个单元格1()
Range("B1").Select
End Sub
Sub 选中一个单元格2()
[C2].Select
End Sub
Sub 选中一个单元格3()
Cells(3,4).Select
End Sub
这里我们给出了三段代码,运行效果如下:
![807d62ec63a21873e2f34f977e7e53a5.gif](https://i-blog.csdnimg.cn/blog_migrate/ff3d69c009fddfbcf77aaa07f02e6200.gif)
为什么用了三种方式来写,这里就需要讲到单元格在VBA中的表示方法了。
在VBA中对于单元格的表达方式主要有三种:RANGE、CELLS、中括号。
(1)RANGE:书写方式是在RANGE表达式后的括号中,写出需要被引用的单元格区域,如上面的A1:D6,或者直接写某一个单元格地址A1。注意单元格地址需要用英文状态的双引号括起来才能生效。
(2)中括号:这是一种单元格表达式的简便写法,如:[A1:D6]、[A1],不需要加双引号。
(3)CELLS:它是一种以行列号锁定单元格的方式,语法为CELLS(行号,列号)。它只能选定一个单元格,如上面的CELLS(3,4)等同于RANGE("D3")或者[D3]。如果需要使用CELLS表示一个区域,可以结合RANGE,如RANGE(CELLS(1,1),CELLS(3,4)),就代表引用A1:D3区域。
相对于上面两个小节的内容,细心的同学一定可以看到,在我们的代码中有的指定了工作表,如第1小节的代码Sheets("select").Range("A1:D6");有的没有指定工作表,如第2小节的那三段代码,此时我们就要引用一个新的概念:ACTIVESHEET。
其实我们在写这两个小节的内容时,建立了两个工作表,如下图:
![e410f7cb223774ad3525d4735c93341f.png](https://i-blog.csdnimg.cn/blog_migrate/8c1e502acd2688b9bd8e3a65c04c9e49.jpeg)
在写第1小节的内容时,我们是选中了“select”工作表之后操作的,此时的“select”工作表就是ACTIVESHEET工作表,也就是我们常说的“被选中的工作表”或者“前台显示的工作表”。
而当我们的ACTIVESHEET 工作表是“select单元格”工作表时,同学们还“敢不敢”再运行一下“工程:选中单元格”呢?
Sub 选中单元格()
Sheets("select").Range("A1:D6").Select
End Sub
作者E图表述知道你们都“胆大妄为”,但结果就是代码报错,因为SELECT属性一定要在ACTIVESHEET表中才有效,如果ACTIVESHEET和代码中SHEETS工作表名称不一致,则不能运行。如果代码中没有指定SHEET,那么代码默认只在ACTIVESHEET中运行。
3.选择不连续区域。举个例子,代码如下:
Sub 选中不连续区域()
Range("A1:D6, E10, E1:F3").Select
End Sub
在VBA中对于选中不连续区域的表达方式,就是用一个逗号间隔开地址,然后再用英文状态下的双引号将它们括起来,这样就可以完成引用。
![4d2df9986efd73f8bfb80819c5207621.gif](https://i-blog.csdnimg.cn/blog_migrate/e147a133734d4d0ab2fab379d2bad533.gif)
4.选择区域的交集部分。举个例子,代码如下:
Sub 选中交集区域()
Range("A1:D6 D1:F3").Select
End Sub
在例3中,逗号是联合引用符,那么区域的交集部分,在EXCEL中是使用空格连接的。学习更多技巧,请收藏部落窝教育excel图文教程。
![43b6614c34f089f67c3d64dcceaabc35.gif](https://i-blog.csdnimg.cn/blog_migrate/71d5dfee785ed853c64820ddf72ee92d.gif)
这和我们使用工作表函数的道理是一样的。怎么?你还不知道工作表函数的“交集引用”吗?写法都是一样的,如下图所示:
![3e9d844a06d92562701b6d1f9f874df9.png](https://i-blog.csdnimg.cn/blog_migrate/c264025d8b56d70e1501d85646d21920.jpeg)
二、单元格赋值
“赋值”,顾名思义,其实就是给某一个对象的属性“赋予一个值”,按照赋值的规则,赋予的内容可以是“数值”、“文本”等等。当然在VBA中值的格式有很多,我们可以先易后难,先了解日常使用的,再去考虑深入研究,这是一个很重要的学习方法,“先了解用法,再了解还可以怎么高级的运用!”
1.单元格赋值。给一个或者多个单元格赋值的过程,其实很简单。想想我们在使用工作表函数的时候,是不是需要先输入一个“=”,函数才能生效。这个“=”就是给单元格赋值的命令符,代码如下:
Sub 赋值1()
Sheets("单元格赋值").Range("A3") = 6
Sheets("单元格赋值").Cells(4, 1) = "乘数"
Sheets("单元格赋值").[A5] = "被乘数"
End Sub
![22f5ba448adc8c2a22488430cec0cf7f.gif](https://i-blog.csdnimg.cn/blog_migrate/4c3c3895868d42f2879c5e8fd2ece7fb.gif)
在代码中,我们依然使用了三种单元格的表示方式,分别给A3、A4、A5单元格进行了赋值,这其中有数值,也有文本,当然文本需要使用英文状态的双引号括起来,这个规则和工作表中函数的写法是一样的。
2.跨表引用,计算式结果赋值。我们在工作表“select”中设置了两个数值,现在将两个值的乘积赋值给B3单元格,代码如下:
Sub 赋值2()
Sheets("单元格赋值").Cells(3, 2) = Sheets("select").Range("B2") * Sheets("select").Range("B3")
End Sub
![8ef21435b14f25effb32a06bcde1fb23.gif](https://i-blog.csdnimg.cn/blog_migrate/1e0182912023bce9264922f3faf42ef4.gif)
“select”工作表的B2单元格是4,B3是6,相乘等于24,用“=”号赋值给了“单元格赋值”工作表中的Cells(3,2)单元格(即B3单元格)。就是如此简单,只要了解了代码的表达式写法,就可以写出VBA代码啦~
3.工作表函数也能在VBA中使用。如果你要汇总一列数据,是不是马上就会想到SUM函数,其实在VBA中一样可以使用SUM函数。举个例子,代码如下:
Sub 赋值3()
Sheets("单元格赋值").[C1:C10] = 1
Sheets("单元格赋值").[C11] = Application.WorksheetFunction.Sum(Sheets("单元格赋值").[C1:C10])
End Sub
![80f20a3d29eb42bc8ddb9ecbad4b949c.gif](https://i-blog.csdnimg.cn/blog_migrate/43dc406b9d9b8f1a8ae71e134d251604.gif)
给一个区域赋同一个值,再使用SUM工作表函数对这个单元格区域汇总求和,Application.WorksheetFunction就是调用工作表函数的语句。
【编后语】
看完文章有没有GET到一些VBA的入门知识呢?作者E图表述认为,VBA不应该有“初级知识”这种说法,因为高级语句也是由这些基础知识构建起来的,先学基础,再积累思路,相信同学们一定可以自己写出代码。学习更多技巧,请收藏部落窝教育excel图文教程。
本文配套的练习课件请加入QQ群:981335662下载。
****部落窝教育-VBA编程基础教程****
原创:E图表述/部落窝教育(未经同意,请勿转载)
更多教程:部落窝教育
微信公众号:exceljiaocheng,+v:blwjymx2