遇到的问题

在工作中遇到了一点小小的问题,需要给我负责带的班级的同学们测试男生1000米,女生800米的成绩。表格是这样的:

体育成绩表
序号 班级 姓名 性别 男1000、女800 成绩
1 1 张三 3.50  
2 1 李四 3.44  

我们在录入完成绩后,需要按照一定的标准去给出学生成绩,标准是这样的:

需要我们根据每个学生的成绩,给出对应的分数。于是,我就计算了下我的工作量:每个人对应的需要给分数,总共需要给六个班 x 70 个人也就是差不多420个人给分数。那样的一个工作量,感觉还是比较累的。于是就想能不能写一个函数,自动实现给学生判分。本来感觉这个应该很简单,一个if函数很容易就可以解决了。

解决方案

后来我按照最初的想法实现了一版。函数是这么写的:(非源代码,类似代码)

  1. =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用& 链接,代码如下:
 
       
  1. =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键后,出现如下
 
       在其中写入代码如下:
 
       
  1. Sub Tests()
  2. Dim rng As Range, i As Integer
  3. F2 = "成绩" '标题
  4. For Each rng In Range([e3], Cells(Rows.Count, 5).End(xlUp))
  5. '遍历成绩
  6. If rng.Offset(0, -1) = "女" Then
  7. '按成绩给分
  8. If rng < 3.35 Then
  9. rng.Offset(0, 1) = 100
  10. ElseIf rng < 3.38 Then
  11. rng.Offset(0, 1) = 93
  12. ElseIf rng < 3.42 Then
  13. rng.Offset(0, 1) = 86
  14. ElseIf rng < 3.46 Then
  15. rng.Offset(0, 1) = 80
  16. ElseIf rng < 3.5 Then
  17. rng.Offset(0, 1) = 73
  18. ElseIf rng < 3.54 Then
  19. rng.Offset(0, 1) = 67
  20. ElseIf rng < 3.58 Then
  21. rng.Offset(0, 1) = 60
  22. ElseIf rng < 4.03 Then
  23. rng.Offset(0, 1) = 53
  24. ElseIf rng < 4.08 Then
  25. rng.Offset(0, 1) = 47
  26. ElseIf rng < 4.09 Then
  27. rng.Offset(0, 1) = 40
  28. ElseIf rng >= 4.09 Then
  29. rng.Offset(0, 1) = "不及格"
  30. End If
  31. ElseIf rng.Offset(0, -1) = "男" Then
  32. If rng < 3.35 Then
  33. rng.Offset(0, 1) = 100
  34. ElseIf rng < 3.38 Then
  35. rng.Offset(0, 1) = 93
  36. ElseIf rng < 3.38 Then
  37. rng.Offset(0, 1) = 86
  38. ElseIf rng < 3.38 Then
  39. rng.Offset(0, 1) = 80
  40. ElseIf rng < 3.38 Then
  41. rng.Offset(0, 1) = 73
  42. ElseIf rng < 3.38 Then
  43. rng.Offset(0, 1) = 67
  44. ElseIf rng < 3.38 Then
  45. rng.Offset(0, 1) = 60
  46. ElseIf rng < 3.38 Then
  47. rng.Offset(0, 1) = 53
  48. ElseIf rng < 3.38 Then
  49. rng.Offset(0, 1) = 47
  50. ElseIf rng < 3.38 Then
  51. rng.Offset(0, 1) = 40
  52. ElseIf rng >= 4.09 Then
  53. rng.Offset(0, 1) = "不及格"
  54. End If
  55. End If
  56. If rng = "" Then
  57. rng.Offset(0, 1) = ""
  58. End If
  59. Next rng
  60.  
  61. End Sub

在excel中将成绩录入完后,点开宏,选中其中的tests (刚才写的函数名称)然后单击执行。如图所示:                           

 
       单击执行,然后得出成绩。如图所示:
 
          
 
       自动算分实现。不过目前只能实现一个表格,要想每个表格都实现,那么就需要写在vba的模块中。具体深入的写法,有一本书推荐给大家《别怕,Excel VBA其实很简单》这本书上有详细的介绍。

http://download.csdn.net/detail/u013049248/9513670

excel中VBA的使用的更多相关文章

  1. excel中vba将excel中数字和图表输出到word中

    参考:https://wenku.baidu.com/view/6c60420ecc175527072208af.html 比如将选区变为图片保存到桌面: Sub 将选区转为图片存到桌面() Dim ...

  2. Excel中VBA进行插入列、格式化、排序

    在数据分析中经常需要对数据进行排序.排名,观察指标排名变化情况,手工处理的话不是太困难,但经常使用,还是编写宏比较方便. 宏命令比较简单,不多解释,只说一下注意事项: 1.有合并单元格,比如列.行合并 ...

  3. Excel中VBA 连接 数据库 方法- 摘自网络

    Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...

  4. excel中VBA对多个文件的操作

    添加引用 "Scripting.FileSystemObject" (Microsoft Scripting Runtime) '用于操作文件.目录 Sub 数据整理部分() ' ...

  5. excel中vba求摩尔圆包线

    Dim f As Double, f1 As Double, f2 As Double, df As Double, oxy() As Double, R() As Double, k As Doub ...

  6. 如何在Excel中通过VBA快速查找多列重复的值

    今天项目组的一个同事问我如何快速的找到一个Excel中第3列和第5列的值完全重复的值,我想了想虽然Excel中自带查找重复值的功能,但是好像只能对同一列进行比较,所以就写了一个VBA进行处理,VBA非 ...

  7. 用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法

    用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count Ac ...

  8. Excel中的宏--VBA的简单例子

    第一步:点击录制宏 第二步:填写宏的方法名 第三步:进行一系列的操作之后,关闭宏 第四步:根据自己的需要查看,修改宏 第六步:保存,一般是另存为,后缀名为.xlsm,否则宏语言不能保存. 到此为止恭喜 ...

  9. VBA在Excel中的应用(一):改变符合条件单元格的背景颜色

    在使用excel处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过 ...

随机推荐

  1. precision、recall、accuracy的概念

    机器学习中涉及到几个关于错误的概念: precision:(精确度) precision = TP/(TP+FP) recall:(召回率) recall = TP/(TP+FN) accuracy: ...

  2. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  3. onethink插件二(首页图片轮播)

    2014年8月1日 15:34:15 基于slice-box 写了一个图片轮播的插件. 一.功能: 1.图片轮播功能 2.自定义功能(数量,效果,打开方式) 3.多重效果一键切换 4.独立性强,不影响 ...

  4. C++中的IO流

    一,标准输入流 1.基本功能(头文件为iostream) char ch = cin.get();// 一次读取一个字符,如果遇到EOF则结束. cin.getline(buf,length);// ...

  5. firefox 28.0

    Ubuntu 安装 firefox 28.0指令: apt-cache show firefox | grep Version sudo apt-get install firefox=28.0+bu ...

  6. 将MPLS编译进linux内核中

    系统环境:linux kernel 2.6.35.(此环境是上一篇文章中将ubuntu内核替换后的环境) 编译过程如下: 1)首先需要下载patch文件:linux-kernel-v2.6.35-mp ...

  7. Bash's Big Day

    Bash has set out on a journey to become the greatest Pokemon master. To get his first Pokemon, he we ...

  8. PHP新手之学习类与对象(4)

    五.范围解析操作符(::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外 ...

  9. jQuery学习笔记之jQuery.fn.init()的参数分析

    这篇文章主要介绍了jQuery.fn.init()的参数分析,需要的朋友可以参考下   从return new jQuery.fn.init( selector, context, rootjQuer ...

  10. HTTP协议缓存策略深入详解之ETAG妙用

    Etag是什么: Etag 是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等.具体内部含义是使服务器控制的,就像Cookie那样. HTTP协议规格说明定义 ...