这是《Excel VBA:办公自动化》教程的第3节,介绍变量。
1.变量的基本知识
案例:在「单元格B3」输入不同的行号,然后点击「显示答案」按钮,程序就会自动计算右边相应题目的答案,如何实现?
[备注]
1.题目中F列的数据采用了RANDBETWEEN(10,100),H列采用了RANDBETWEEN(20,50);
2.函数RANDBETWEEN(bottom,top),用于返回一个介于bottom(最小值)和top(最大值)之间的随机数,且每次Excel编辑后该公式都会自动刷新返回的随机数;
我们一起思考一下,这样一个需求用第02篇(todo文章传输门)分享的能够实现吗?我们来分析一下:
可以看到:因为「行号」被我们写为「固定」的4,所以导致我们按下按钮,程序就只能计算第四行的相应单元格的运算结果。
如果按照上面这个思路,是不是我们需要在每行后面都加上一个「查看答案」的按钮,然后关联每一个宏。
如果是这样的话,那么还学什么VBA,直接手工输入,它不香吗?
是的,那么我们用VBA如何实现呢?
我们观察发现:行号是变化的,而且是「正向递增加1」的规律。
在VBA中,我们将这种根据需要能够随时变化的称为变量。
其实,「变量」这个概念,我们在初中都已经能够运用的出神入化了,比如:
这里面,我们通常称x为自变量,能够取任何变化的数字,而y(因变量)就会得到相应的计算结果。怎么样,有么有很熟悉的味道?
回到刚才的那个题目,我们需要将这些变化的行号数字更改为变量。我们用x代替,那么程序就变为:
我们又知道,变量x的变化是依据「单元格B2」内容的变化而变化,也就是:
[备注]
在VBA中,「=」专业术语是「赋值」
即:将等式右边的内容赋值给等式左边,可以类似于我们日常所理解的等号
那么,这个程序完整的代码(乘法测试是这个小程序的名称),就是:
接下来,为了方便大家的理解,我们来模拟一下程序的运行步骤:
(1)点击按钮「查看答案」
(2)按钮自动连接运行宏「乘法测试」
(3)宏「乘法测试」开始逐行执行-第一行
VBA看到Cells(2, 2),说这个我认识,Cells(2, 2)就是「单元格B2」。于是去寻找「单元格B2」的值,发现「单元格B2」=1
(4)「单元格B2」的值1带入Cells(x, 10) = Cells(x, 6) * Cells(x, 8),变为Cells(1, 10) = Cells(1, 6) * Cells(1, 8),翻译为人话就是:单元格J1 = 单元格F1* 单元格 H1
(5)然后,「乘法测试」宏去Excel中寻找单元格F1的值为 28,单元格H1的值为30,计算二者之间的值
(6)最后,将二者的乘积赋值给「单元格F1」,并执行值写入操作
通过,以上我们使用VBA中的变量使我们的程序更加的灵活。
有的同学可能会说:猴子,我想把x换为Cells(2, 2) ,把程序改为这个样子
的确,完全可以这样,结果完全一样。但是这样操作,有以下几点缺点:
1)程序写起来特别的长,非常容易出错;
2)代码不易维护,修改难度大;
3)VBA从内存中读取变量的时间要远低于读取单元格的时间;
因此,可以总结使用变量有以下好处(拿小本本记好):
(1)程序灵活,易于维护和修改;
(2)代码简洁,更加优雅;
(3)执行速度更快,效率更高。
2.变量命名规则
案例:已知「单元格D3」为固定值10,在「单元格C3」输入任意数值,点击「查看答案」求得长方形的面积显示在「单元格E3」
那么,我们该如何写代码呢?
(1)将「单元格C3」也就是Cells(3, 3)的数值取出来,赋值给变量x,那么变量x现在就是「长」
(2)用变量y代表长方形面积,根据「长方形面积 = 长 * 宽」公式写为「y = x * Cells(3, 4)」
(3)最后,将「y」值赋值给「单元格E5」也就是Cells(3, 5),并同时执行数值写入操作
最终,程序就能够比较好的完成了,到这里似乎完成了所有的工作。
但是大家有没有发现,代码是写完了,可是上面都是x,y这些英文字母,那么这些到底代表什么意思?
是的,一份优雅的代码,必须有一个好的名字。比如大家看下下图,是不是会很清晰呢?
是的,这样写,确实非常容易读懂。但是,大家需要注意给VBA中变量取名字
需要注意以下几点:
(1)尽量使用有意义的名字,且尽量使用英文或拼音命名
一方面,变量命名有意义就是大家可以读懂,知道变量表达的意义,增强代码的可读性。
另一方面,尽量使用英文或拼音,因为绝大多数的程序基本都是完全支持英文,部分语言或是版本对中文兼容性较差。比如:长,用英文「length」或是「chang」,而尽量不用使用中文「长」
(2)不要使用特殊字符
我们一般常用的是英文、中文、数字、下划线且不能以数字开头
(3)不能和系统保留字(关键字)一致
保留字(关键字)就是在VBA中被程序赋予特殊含义的单词。比如:sub和end sub表示程序的开始和结束;for表示循环;while表示循环.....
(4)VBA大小写不敏感
比如:定义变量Aa = 1 和变量 aA = 10,我们人可能认为两个变量不一样,但是在VBA认为这两个变量是一样的。
3.总结
好了,总结一下今天的VBA知识点。
(1)变量就是根据需要能够随时变化的,使用它有以下3个优点:
a.程序灵活,易于维护和修改;
b.代码简洁,更加优雅;
c.执行速度更快,效率更高。
(2)变量命名有讲究,需要注意以下四点:
a.尽量使用有意义的名字,且尽量使用英文或拼音命名
b.不要使用特殊字符
c.不能和系统保留字(关键字)一致
d.VBA大小写不敏感