excel中VBA的使用
2016-05-08 16:31
429 查看
遇到的问题
在工作中遇到了一点小小的问题,需要给我负责带的班级的同学们测试男生1000米,女生800米的成绩。表格是这样的:
体育成绩表
我们在录入完成绩后,需要按照一定的标准去给出学生成绩,标准是这样的:
需要我们根据每个学生的成绩,给出对应的分数。于是,我就计算了下我的工作量:每个人对应的需要给分数,总共需要给六个班 x 70 个人也就是差不多420个人给分数。那样的一个工作量,感觉还是比较累的。于是就想能不能写一个函数,自动实现给学生判分。本来感觉这个应该很简单,一个if函数很容易就可以解决了。
后来我按照最初的想法实现了一版。函数是这么写的:(非源代码,类似代码)
后来发现这样写没有办法实现,excel会报错,报错如下:
后来查了下,是因为excel中if函数只能嵌套七层,再多的话就会出现刚才的问题。那么问题还是要解决啊,怎么办呢?
经过检查,发现如下解决方案:将if用& 链接,代码如下:
但是发现这样并不能解决问题,会出现如下的显示:
后来,就考虑是不是用下vba。然后就查了相关的信息。发现vba实现的话其实很简单。按Alt+F11键后,出现如下
在其中写入代码如下:
单击执行,然后得出成绩。如图所示:
自动算分实现。不过目前只能实现一个表格,要想每个表格都实现,那么就需要写在vba的模块中。具体深入的写法,有一本书推荐给大家《别怕,Excel VBA其实很简单》这本书上有详细的介绍。
http://download.csdn.net/detail/u013049248/9513670
在工作中遇到了一点小小的问题,需要给我负责带的班级的同学们测试男生1000米,女生800米的成绩。表格是这样的:
序号 | 班级 | 姓名 | 性别 | 男1000、女800 | 成绩 |
1 | 1 | 张三 | 男 | 3.50 | |
2 | 1 | 李四 | 女 | 3.44 |
我们在录入完成绩后,需要按照一定的标准去给出学生成绩,标准是这样的:
需要我们根据每个学生的成绩,给出对应的分数。于是,我就计算了下我的工作量:每个人对应的需要给分数,总共需要给六个班 x 70 个人也就是差不多420个人给分数。那样的一个工作量,感觉还是比较累的。于是就想能不能写一个函数,自动实现给学生判分。本来感觉这个应该很简单,一个if函数很容易就可以解决了。
解决方案
后来我按照最初的想法实现了一版。函数是这么写的:(非源代码,类似代码)
=IF(D4<1,1," IF(D4<2,"这是2","IF(D4<3,"这是3","IF(D4<4,"这是4","IF(D4<5,"这是5","IF(D4<6,"这是6","IF(D4<7,"这是7","IF(D4<8,"这是8","IF(D4<9,"这是9","大于9")")")")")")")")")
后来发现这样写没有办法实现,excel会报错,报错如下:
后来查了下,是因为excel中if函数只能嵌套七层,再多的话就会出现刚才的问题。那么问题还是要解决啊,怎么办呢?
优化
经过检查,发现如下解决方案:将if用& 链接,代码如下:
=IF(D13<1,1,"")&IF(D13<2,"这是2","")&IF(D13<3,"这是3","")&IF(D13<4,"这是4","")&IF(D13<5,"这是5","")&IF(D13<6,"这是6","")&IF(D13<7,"这是7","")&IF(D13<8,"这是8","")&IF(D13<9,"这是9","")&IF(D13<10,"这是10","")&IF(D13<11,"这11","")&IF(D13<12,"大于11","")可以继续&连接下去
但是发现这样并不能解决问题,会出现如下的显示:
使用宏vba
后来,就考虑是不是用下vba。然后就查了相关的信息。发现vba实现的话其实很简单。按Alt+F11键后,出现如下
在其中写入代码如下:
Sub Tests() Dim rng As Range, i As Integer F2 = "成绩" '标题 For Each rng In Range([e3], Cells(Rows.Count, 5).End(xlUp)) '遍历成绩 If rng.Offset(0, -1) = "女" Then '按成绩给分 If rng < 3.35 Then rng.Offset(0, 1) = 100 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 93 ElseIf rng < 3.42 Then rng.Offset(0, 1) = 86 ElseIf rng < 3.46 Then rng.Offset(0, 1) = 80 ElseIf rng < 3.5 Then rng.Offset(0, 1) = 73 ElseIf rng < 3.54 Then rng.Offset(0, 1) = 67 ElseIf rng < 3.58 Then rng.Offset(0, 1) = 60 ElseIf rng < 4.03 Then rng.Offset(0, 1) = 53 ElseIf rng < 4.08 Then rng.Offset(0, 1) = 47 ElseIf rng < 4.09 Then rng.Offset(0, 1) = 40 ElseIf rng >= 4.09 Then rng.Offset(0, 1) = "不及格" End If ElseIf rng.Offset(0, -1) = "男" Then If rng < 3.35 Then rng.Offset(0, 1) = 100 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 93 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 86 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 80 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 73 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 67 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 60 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 53 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 47 ElseIf rng < 3.38 Then rng.Offset(0, 1) = 40 ElseIf rng >= 4.09 Then rng.Offset(0, 1) = "不及格" End If End If If rng = "" Then rng.Offset(0, 1) = "" End If Next rng End Sub在excel中将成绩录入完后,点开宏,选中其中的tests (刚才写的函数名称)然后单击执行。如图所示:
单击执行,然后得出成绩。如图所示:
自动算分实现。不过目前只能实现一个表格,要想每个表格都实现,那么就需要写在vba的模块中。具体深入的写法,有一本书推荐给大家《别怕,Excel VBA其实很简单》这本书上有详细的介绍。
http://download.csdn.net/detail/u013049248/9513670
相关文章推荐
- 使用Python生成Excel格式的图片
- Outlook 批量发送邮件
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- VBA解决Windows空当接龙的617局
- excel vba 高亮显示当前行代码
- SQL 导入导出Excel数据的语句
- VBA中连接SQLSERVER数据库例子
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#实现Excel动态生成PivotTable
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结
- C#实现导入CSV文件到Excel工作簿的方法
- C#基于NPOI生成具有精确列宽行高的Excel文件的方法
- 总提示[Microsoft][ODBC Excel Driver] 数值字段溢出官方解决方法
- C#将Sql数据保存到Excel文件中的方法
- python pandas 处理 excel
- 利用outlook结合word与excel实现批量发送邮件