![067ca684c18625bd687fec7baca545c2.png](https://i-blog.csdnimg.cn/blog_migrate/7b969513cd3301dc7ae72e260c1c23b8.jpeg)
这是《Excel VBA:办公自动化》教程的第3节,介绍变量。
![a093a6f6ab45c7c6624b903729c76ba4.png](https://i-blog.csdnimg.cn/blog_migrate/66ed455f552b9d1cd6487d1985170bff.jpeg)
1.变量的基本知识
案例:在「单元格B3」输入不同的行号,然后点击「显示答案」按钮,程序就会自动计算右边相应题目的答案,如何实现?
![8726d77e778fcaeb3ce6d42e96e14f33.png](https://i-blog.csdnimg.cn/blog_migrate/9454233d82923d45d6f708572235ac9d.jpeg)
[备注]
1.题目中F列的数据采用了RANDBETWEEN(10,100),H列采用了RANDBETWEEN(20,50);
2.函数RANDBETWEEN(bottom,top),用于返回一个介于bottom(最小值)和top(最大值)之间的随机数,且每次Excel编辑后该公式都会自动刷新返回的随机数;
我们一起思考一下,这样一个需求用第02篇(todo文章传输门)分享的能够实现吗?我们来分析一下:
![806e6e714757dc5162f06a7c15e9eaa0.png](https://i-blog.csdnimg.cn/blog_migrate/c421e5baaadd2dca9682e85bc9c43a84.jpeg)
可以看到:因为「行号」被我们写为「固定」的4,所以导致我们按下按钮,程序就只能计算第四行的相应单元格的运算结果。
如果按照上面这个思路,是不是我们需要在每行后面都加上一个「查看答案」的按钮,然后关联每一个宏。
![e383943b2d0eab1ae3863be3e61656b6.png](https://i-blog.csdnimg.cn/blog_migrate/ddcafc28d0fc03bff40a34f7de860c12.jpeg)
如果是这样的话,那么还学什么VBA,直接手工输入,它不香吗?
是的,那么我们用VBA如何实现呢?
![6e3b23f437cb3ca98864c1fd2c7b26c0.png](https://i-blog.csdnimg.cn/blog_migrate/062262e3a66a1ae35dc7b35dc4bd9829.jpeg)
我们观察发现:行号是变化的,而且是「正向递增加1」的规律。
在VBA中,我们将这种根据需要能够随时变化的称为变量。
其实,「变量」这个概念,我们在初中都已经能够运用的出神入化了,比如:
![ad3981ec1bb1c41912d0f2c2b1ff141f.png](https://i-blog.csdnimg.cn/blog_migrate/d3848aabf40fce3ba4c514974948d1a8.jpeg)
这里面,我们通常称x为自变量,能够取任何变化的数字,而y(因变量)就会得到相应的计算结果。怎么样,有么有很熟悉的味道?
回到刚才的那个题目,我们需要将这些变化的行号数字更改为变量。我们用x代替,那么程序就变为:
![5dbd45273a9fa208bfbd222920829df1.png](https://i-blog.csdnimg.cn/blog_migrate/9587573476485a0dee4c7b876155929e.jpeg)
我们又知道,变量x的变化是依据「单元格B2」内容的变化而变化,也就是:
![f91d7c44ddd6e7fd8dff7d7fd86cfe85.png](https://i-blog.csdnimg.cn/blog_migrate/638e88a631ccb0a6efc598013df88610.jpeg)
[备注]
在VBA中,「=」专业术语是「赋值」
即:将等式右边的内容赋值给等式左边,可以类似于我们日常所理解的等号
那么,这个程序完整的代码(乘法测试是这个小程序的名称),就是:
![a63f92ada5f60e1809c0d7ad78dbb825.png](https://i-blog.csdnimg.cn/blog_migrate/a2f0188b8cce7842b01505356dd46d26.jpeg)
接下来,为了方便大家的理解,我们来模拟一下程序的运行步骤:
(1)点击按钮「查看答案」
![209a711cfa0669c17d455c6fdb767808.png](https://i-blog.csdnimg.cn/blog_migrate/0c8c28ba3243f694e167d695031599c5.jpeg)
(2)按钮自动连接运行宏「乘法测试」
![ceca42df9cd9a9f61d31874144a6daf8.png](https://i-blog.csdnimg.cn/blog_migrate/f28d0a618be07d7f3ee6a3827cfb11bd.jpeg)
(3)宏「乘法测试」开始逐行执行-第一行
![c07dbee0b7e28b60b027c5d9b8f468b3.png](https://i-blog.csdnimg.cn/blog_migrate/9d2f1037e02f9f85b881950530018e8b.jpeg)
VBA看到Cells(2, 2),说这个我认识,Cells(2, 2)就是「单元格B2」。于是去寻找「单元格B2」的值,发现「单元格B2」=1
![2b9ec2032372160e3e4a49079b73849c.png](https://i-blog.csdnimg.cn/blog_migrate/716bb391176dcbe6de0f0e2f214a9679.jpeg)
(4)「单元格B2」的值1带入Cells(x, 10) = Cells(x, 6) * Cells(x, 8),变为Cells(1, 10) = Cells(1, 6) * Cells(1, 8),翻译为人话就是:单元格J1 = 单元格F1* 单元格 H1
![09a2ffb2cee2bccdab6d2730ab7c605a.png](https://i-blog.csdnimg.cn/blog_migrate/14921c049c84eef1e58d892e924265f7.jpeg)
(5)然后,「乘法测试」宏去Excel中寻找单元格F1的值为 28,单元格H1的值为30,计算二者之间的值
![d7e63688f1d58c32b5fb13a161a94c08.png](https://i-blog.csdnimg.cn/blog_migrate/8bfb54bb4ad02e3a6ee5c1e4043f4a6e.jpeg)
(6)最后,将二者的乘积赋值给「单元格F1」,并执行值写入操作
![55db44902ad9115ea8b2dc581b14a54f.png](https://i-blog.csdnimg.cn/blog_migrate/8dc4144bdc220d803adb69a27476034e.jpeg)
通过,以上我们使用VBA中的变量使我们的程序更加的灵活。
有的同学可能会说:猴子,我想把x换为Cells(2, 2) ,把程序改为这个样子
![730206738ed6139e4ac48eb85c7588a6.png](https://i-blog.csdnimg.cn/blog_migrate/640e9335c4b5b0995e681692ea7ff91c.jpeg)
的确,完全可以这样,结果完全一样。但是这样操作,有以下几点缺点:
1)程序写起来特别的长,非常容易出错;
2)代码不易维护,修改难度大;
3)VBA从内存中读取变量的时间要远低于读取单元格的时间;
因此,可以总结使用变量有以下好处(拿小本本记好):
(1)程序灵活,易于维护和修改;
(2)代码简洁,更加优雅;
(3)执行速度更快,效率更高。
2.变量命名规则
案例:已知「单元格D3」为固定值10,在「单元格C3」输入任意数值,点击「查看答案」求得长方形的面积显示在「单元格E3」
![fca192c9373b5ff66d905c4ca637dc67.png](https://i-blog.csdnimg.cn/blog_migrate/420c8c3b822300cc0abe8e0473fef731.jpeg)
那么,我们该如何写代码呢?
(1)将「单元格C3」也就是Cells(3, 3)的数值取出来,赋值给变量x,那么变量x现在就是「长」
![7bbcdf7fa704c754f8fa9edb7ad5a282.png](https://i-blog.csdnimg.cn/blog_migrate/8dba6cf0de6ea587599bd0de291b65ff.jpeg)
(2)用变量y代表长方形面积,根据「长方形面积 = 长 * 宽」公式写为「y = x * Cells(3, 4)」
![5aa66a4ee59377257831458ce12bf45f.png](https://i-blog.csdnimg.cn/blog_migrate/8d57dcc90a137740f21455c2ec4f16dc.jpeg)
(3)最后,将「y」值赋值给「单元格E5」也就是Cells(3, 5),并同时执行数值写入操作
![f218aa5f47970bc48e9c7ea313c5dc82.png](https://i-blog.csdnimg.cn/blog_migrate/fcc1025390e3e474490a5038705ba240.jpeg)
最终,程序就能够比较好的完成了,到这里似乎完成了所有的工作。
但是大家有没有发现,代码是写完了,可是上面都是x,y这些英文字母,那么这些到底代表什么意思?
![370c0dcd4bc8b1f1be5a890eef65cc4d.png](https://i-blog.csdnimg.cn/blog_migrate/786c1ac8812ae55cb4526160af5fcab8.jpeg)
是的,一份优雅的代码,必须有一个好的名字。比如大家看下下图,是不是会很清晰呢?
![a7200168fe42ac14ce0ff325c667e994.png](https://i-blog.csdnimg.cn/blog_migrate/fd2f75b3166dc7b8b2fe7919d1dbdca2.jpeg)
是的,这样写,确实非常容易读懂。但是,大家需要注意给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大小写不敏感
![60485e5fcdeaf5b1fe670df8ad28dfe6.png](https://i-blog.csdnimg.cn/blog_migrate/e05875469568da813ad6450c11602443.jpeg)
推荐:人工智能时代的必学技能
![c01a1d7ac193b174f89bf36f914b4d15.png](https://i-blog.csdnimg.cn/blog_migrate/402e1f0551ae74ef3cf7e8c5d05e8e0b.jpeg)