一个硬件工程师的Excel VBA的自学之旅。
上一次只是简单的介绍了Excel VBA的程序组成,这次通过实例操作Excel表格,让大家体会到Excel VBA的便利,且通过实例介绍部分Excel VBA的基础语法。
1、统计学生总分
现有一个学生成绩单如下,需要在F列算出每个学生的总分。
2、运行VBA程序后在F列计算出了每个学生的总分,如下图所示。
3、Excel VBA代码如下,下面来介绍涉及到的各种Excel VBA基础语法。
前5句带Dim As的语句是声明了5个变量,变量只有声明了,才能使用。
Excel VBA里面包含的数据类型如下图所示。
Set sht = ThisWorkbook.Worksheets(1)
Set的功能是将对象引用赋给变量,ThisWorkbook.Worksheets(1)表示的是VBA代码所在的Excel表格的第一张Sheet页,第二张Sheet页是ThisWorkbook.Worksheets(2)。上述语句就是把工作表的第一个Sheet页引用给sht,后续程序就可以用sht替代ThisWorkbook.Worksheets(1)使用。
故 math = sht.Cells(i, "D").Value
可以改成 math = ThisWorkbook.Worksheets(1).Cells(i, "D").Value
使用了Set引用某个Sheet页,如果以后需要操作的Sheet页为第二张Sheet页,只需要修改Set sht = ThisWorkbook.Worksheets(2)就可以,其他地方都不用动,大大方便了程序的修改。
i = 2
这是给变量赋值,为什么赋值为2,成绩表格的第二行才是成绩,第一行是表头,所以从第二行开始执行成绩统计。
i使用Integer,其范围为 -32,768 到 32,767 之间。因行数是整数,且行数没有超过32767,所以可以使用。而其他4个和成绩相关的变量使用Single(单精度浮点型),因为成绩可能出现带小数点的分数,所以没有使用整型。
Do While sht.Cells(i, "A").Value <> ""
Loop
这是一个循环语句结构,其基本结构如下图所示,
sht.Cells(i, "A").Value <> ""
这是一个逻辑表达式,用到了不等号“<>”,功能是判断A列的每个表格是否是空的,如果是空的,返回结果为False,进而退出Do While循环。
sht.Cells(i, "A").Value 是获取A列的每个表格的值,例如sht.Cells(3, "A").Value是A3的值“9202”。
Excel VBA里面包含的比较运算符及作用如下表所示。
language = sht.Cells(i, "C").Value '获取语文成绩
math = sht.Cells(i, "D").Value '获取数学成绩
english = sht.Cells(i, "E").Value '获取英语成绩
上述3条语句是获取学生的语文等3门课程的成绩,“=”在这里是赋值的意思。
gross_score = language + math + english '算出总分
上述语句是算出总分,并赋值给总分变量。
Excel VBA里面包含的算术运算符及作用如下表所示。
sht.Cells(i, "F").Value = gross_score '把总分写到表格F列
上述语句是给F列的表格赋值,写上总分。需要注意,sht.Cells(i, "F").Value在不同的位置,代表的作用不同。
例如:math = sht.Cells(i, "D").Value '获取数学成绩
sht.Cells(i, "F").Value = gross_score '把总分写到表格F列
i = i + 1
处理完一行,计数需要+1,下一次就是处理下一行的数据。没有这一行代码,就一直在处理第二行的数据。
以上内容如有描述错误,欢迎指导。