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处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过 ...
随机推荐
- windows 下nginx 虚拟主机搭建
需要在 nginx.conf里面引入刚才配置的那个文件 第一步 加东西 http的节点里面加上 一定要注意的是:必须以 ; 结尾 include D:/phpen/nginx-1.3.6/co ...
- ARM-LINUX学习笔记-1
安装完linux之后记得系统更新,更新使用apt命令,如下(记得使用之前使用sudo -i 指令切换到root用户模式) apt-get update 更新系统软件源,相当于查找更新 apt-get ...
- MySQL的MyISAM和InnoDB
1.概述 MySQL数据库其中一个特性是它的存储引擎是插件式的.用户可以根据应用需要选择存储引擎.Mysql默认支持多种存储引擎,以适用各种不同的应用需要. 默认情况下,创建表不指定表的存储引擎,则新 ...
- 学习vi(1)
原文地址:http://www.gentoo.org/doc/zh_cn/vi-guide.xml#doc_chap2 1. 新手上路 介绍 本教程将会向你展示如何使用vi──一个强大的可视化编辑器 ...
- js div截取字符串的长度
<div style="width:100%;" id="changdu">这个是字符串的长度</div> $("#chang ...
- ios-Ineligible Devices 不被识别的设备
此问题大致分为几种: 1.设备不可用,出现Ineligible Devices,如下图: 此错误因为 Xcode的Deployment Target 大于设备的,选择和设备一样 或者 低于设备的.如下 ...
- 前段验证框架 formValidator
http://blog.csdn.net/lorinzhang/article/details/7283557
- Java中String的split()方法的一些需要注意的地方
public String[] split(String regex, int limit) split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数( ...
- python 开发者 精品
当 Python 和 R 遇上北京二手房 http://mp.weixin.qq.com/s?timestamp=1473262097&src=3&ver=1&signatur ...
- IOS 使用GCD改善性能
1.GCD介绍 GCD:Grand Central Dispathch,核心中央调度,是一种异步技术.但是它是系统级的. 负责管理队列,是线程之上的抽象层.队列可以并行或串行运行,能够在系统级自动管理 ...