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

时间: 2024-10-10 17:20:39

excel中VBA的使用的相关文章

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

参考:https://wenku.baidu.com/view/6c60420ecc175527072208af.html 比如将选区变为图片保存到桌面: 1 Sub 将选区转为图片存到桌面() 2 Dim ans As Byte, Pic As String, Paths As String 3 On Error Resume Next 4 Paths = CreateObject("WScript.Shell").SpecialFolders("Desktop"

excel中VBA对多个文件的操作

添加引用 "Scripting.FileSystemObject" (Microsoft Scripting Runtime) '用于操作文件.目录 Sub 数据整理部分() ' ' 数据整理到新的Sheet '' Dim fso As New FileSystemObject Dim folder As folder Dim file As file Dim strExt As String Dim wkb As Workbook strExt = "xlsx"

Excel中的VBA编程

目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错.而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作. 1.以Excel 2007为例,如果要进行VBA编程,需要启用"开发工具" 选项.在Excel 选项对话框中勾选[在功能区显示"开发工具"选项卡]复选框. 在开发工具选项中点击"查看代码",打开Microsoft Visual Basic界面. 2.在M

[Powershell / VBA] 把excel中的表分离成独立的excel文件

This article also published in Eng @ http://www.cnblogs.com/LarryAtCNBlog/p/4441201.html 今天在两个地方看到了这样一个问题:把一个excel中的表复制出来另存为一个独立的excel文件.其中一个是cnblog,另一个想不起来了.想到自己将来也可能遇到这样的问题,于是用powershell做了一个脚本以备不时之需. Powershell 当然,首先要有一个excel文件包括了一堆表. 用脚本自动化excel最常

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

在使用excel处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过代码来处理是个不错的选择,excel可以通过VBA编程来处理内部数据,在打开excel页面后,可以通过“alt + F11”组合键来启动VBA编程界面,跟VB的编程界面和语法一样,需要注意的是如何调用excel的内容.VBA通过sheet, range和cells三个层次来调用excel中的制定区域

通过VBA在Excel中添加菜单和菜单项按钮(Excel启动时候添加)

将以下代码保存到.xlam或.xla(Excel97-2003)文件. 在ThisWorkBook对象中,添加Workbook_Open事件,调用启动菜单过程. Private Sub Workbook_Open() Call MenuSetup(True) End Sub '----------------------------------------------- '在Excel中添加菜单和菜单项按钮(Excel启动时候添加) '------------------------------

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

第一步:点击录制宏 第二步:填写宏的方法名 第三步:进行一系列的操作之后,关闭宏 第四步:根据自己的需要查看,修改宏 第六步:保存,一般是另存为,后缀名为.xlsm,否则宏语言不能保存. 到此为止恭喜你一个简单的宏已经制作成功,当然宏也可以调用Excel中的公式,例如:sum等,排序,布局,查询,等. Excel中常用对象的简单介绍: 800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternet

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

用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点:有时可能会比实际数大一些,原因是如果你把最后几行(列)数据清除后(非整行或整列删除), 用这个命令仍返回未清除前的值.就是说现在虽然是空的,但是你曾经用过也算你的. 方法2: ActiveSheet.Range("A65535

VBA在Excel中的应用(三)

目录  Chart Export Chart Format Chart Lengend  Chart Protect  Chart Title  Chart Chart Export 1. 将Excel中的图表导出成gif格式的图片保存到硬盘上 Sub ExportChart()     Dim myChart As Chart     Set myChart = ActiveChart     myChart.Export Filename:="C:\Chart.gif", Filt