excel中VBA的使用
遇到的问题
在工作中遇到了一点小小的问题,需要给我负责带的班级的同学们测试男生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
excel中VBA的使用的更多相关文章
- excel中vba将excel中数字和图表输出到word中
参考:https://wenku.baidu.com/view/6c60420ecc175527072208af.html 比如将选区变为图片保存到桌面: Sub 将选区转为图片存到桌面() Dim ...
- Excel中VBA进行插入列、格式化、排序
在数据分析中经常需要对数据进行排序.排名,观察指标排名变化情况,手工处理的话不是太困难,但经常使用,还是编写宏比较方便. 宏命令比较简单,不多解释,只说一下注意事项: 1.有合并单元格,比如列.行合并 ...
- Excel中VBA 连接 数据库 方法- 摘自网络
Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...
- excel中VBA对多个文件的操作
添加引用 "Scripting.FileSystemObject" (Microsoft Scripting Runtime) '用于操作文件.目录 Sub 数据整理部分() ' ...
- excel中vba求摩尔圆包线
Dim f As Double, f1 As Double, f2 As Double, df As Double, oxy() As Double, R() As Double, k As Doub ...
- 如何在Excel中通过VBA快速查找多列重复的值
今天项目组的一个同事问我如何快速的找到一个Excel中第3列和第5列的值完全重复的值,我想了想虽然Excel中自带查找重复值的功能,但是好像只能对同一列进行比较,所以就写了一个VBA进行处理,VBA非 ...
- 用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法
用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count Ac ...
- Excel中的宏--VBA的简单例子
第一步:点击录制宏 第二步:填写宏的方法名 第三步:进行一系列的操作之后,关闭宏 第四步:根据自己的需要查看,修改宏 第六步:保存,一般是另存为,后缀名为.xlsm,否则宏语言不能保存. 到此为止恭喜 ...
- VBA在Excel中的应用(一):改变符合条件单元格的背景颜色
在使用excel处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过 ...
随机推荐
- Android 屏幕适配方案(转载)
3.百分比的引入 1.引入 其实我们的解决方案,就是在项目中针对你所需要适配的手机屏幕的分辨率各自简历一个文件夹. 如下图: 然后我们根据一个基准,为基准的意思就是: 比如480*320的分辨率为基准 ...
- box2d中的物理世界
box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...
- XP Mode 虛擬機器 for Windows 7
免驗證官方直接下載 官網 Download Windows Virtual PC XP Mode for Windows 7 性質 Windows 7 免費 / en 多國 繁體中文(Traditio ...
- 一种新的隐藏-显示模式诞生——css3的scale(0)到scale(1)
.dropdown-menu { background: rgba(255, 255, 255, 0.98) none repeat scroll 0 0; box-shadow: 0 1px 2 ...
- php __set()和__get()函数
<?php /* 总结: 1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用 2. 向一个难以访问的属性赋值的时候 __set() 方法被调用 3. 难以访问包括:(1)私有属 ...
- Spring Boot Web Executable Demo
Spring Boot Web Executable Demo */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.sr ...
- setTimeout,setInterval 最短触发时间
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- 如何设置打开jsp页面速度加快?
1.
- 1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)
创建名为Grocery Dude的Single View程序,并按默认设置处理,不勾选Core Date 和 Git. 设计故事板: 选择Main.Storyboard 拖放一个 Table View ...
- centos 6.5下cmake工具的安装与配置
一.cmake是什么? CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C+ ...