VBA学习2_教你快速入门Excel-宏与VBA(下)

来源:互联网 发布:淘宝店铺招牌图片格式 编辑:程序博客网 时间:2024/04/27 14:26

上一篇博客《教你快速入门Excel-宏与VBA(上)》,我们主要对Excel宏与VBA进行了简单的介绍和使用说明,这次我们做一个宏与VBA的简单实例,通过这个实例,了解宏与VBA的优势所在,在此之前,读者有必要了解一下Excel中单元格,行和列的命名和VB的一些基础语法,这里我们不做过多的解释。  

需求说明:

    某学校要进行体育测试,需要根据输入的成绩,自动对应得分,同时自动计算总分,具体表如下:

表一

表二


解决方案:

    在表一中输入成绩,自动在表二中查找,该成绩所对应的分数,比如图中张伟的《负重深蹲(次)》项目成绩是40,那么通过查询表二,她的得分应该是97,同时张伟的《负重深蹲(次)》项目得分自动更新为97,对应总分更新为97;

    该问题解决依赖简单的录制宏不好实现,这里我们使用VBA编写代码:

模块代码:

    点击单元格获取成绩:

[vb] view plain copy
  1. '点击时,获取成绩  
  2. Public Sub CellsClick(ByVal Target As Range)  
  3.   
  4.     '选择有效表格的区域,否则跳过  
  5.     If Target.Column < 4 Or Target.Row < 5 Or Target.Column > ActiveSheet.UsedRange.Columns.Count - 1 Or Target.Row > ActiveSheet.UsedRange.Rows.Count Then  
  6.         Exit Sub  
  7.     End If  
  8.       
  9.     Dim selectedCol As Integer  
  10.     Dim j As Integer  
  11.     Dim isUpdate As Boolean  
  12.       
  13.     selectedCol = (Target.Column - 4) \ 2 + 2  '获取 表二 中对应列号  
  14.   
  15.     '行循环  
  16.     For j = 2 To Worksheets("表二").UsedRange.Columns.Count Step 1  
  17.         If Cells(Target.Row, Target.Column).Value <> "" And Cells(Target.Row, Target.Column).Value = Worksheets("表二").Cells(j, selectedCol).Value Then  
  18.             'MsgBox "你选中了:" & Worksheets("表二").Cells(j, selectedCol).Value & "得分" & Worksheets("表二").Cells(j, 1).Value  
  19.             Cells(Target.Row, Target.Column + 1).Value = Worksheets("表二").Cells(j, 1).Value  
  20.             isUpdate = True  
  21.         End If  
  22.     Next  
  23.     If Not isUpdate Then  
  24.         Cells(Target.Row, Target.Column + 1).Value = ""  
  25.     End If  
  26.       
  27.      '列循环,自动求和  
  28.     Dim sum As Double  
  29.      sum = 0  
  30.     For j = 5 To ActiveSheet.UsedRange.Columns.Count - 3 Step 2  
  31.         sum = sum + Val(Cells(Target.Row, j).Value)  
  32.     Next  
  33.     Cells(Target.Row, ActiveSheet.UsedRange.Columns.Count - 1).Value = sum  
  34. End Sub  

    宏函数:激活时,自动获取全部成绩,也可用于填写成绩自动获得得分,但是由于每次都要激活全部单元格进行刷新,所有如果用此方法解决,则会产生Excel反应慢或是半天没有反应的情况,所以该方法只对应到得分按钮即可,即得分按钮指定宏为Worksheet_Activate!

[vb] view plain copy
  1. '激活时,自动获取全部成绩  
  2. Public Sub WorksheetActivate()  
  3.   
  4.     Dim selectedCol As Integer  
  5.     Dim r As Integer  
  6.     Dim c As Integer  
  7.     Dim j As Integer  
  8.     Dim isUpdate As Boolean  
  9.       
  10.     '行循环  
  11.     For r = 5 To ActiveSheet.UsedRange.Rows.Count  
  12.   
  13.        '列循环  
  14.        For c = 4 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2  
  15.             isUpdate = False  
  16.             selectedCol = (c - 4) \ 2 + 2 '获取 表二 中对应列号  
  17.             For j = 2 To Worksheets("U15-16女附").UsedRange.Rows.Count  
  18.                 If Cells(r, c).Value <> "" And Cells(r, c).Value = Worksheets("表二").Cells(j, selectedCol).Value Then  
  19.                     Cells(r, c + 1).Value = Worksheets("表二").Cells(j, 1).Value  
  20.                     isUpdate = True  
  21.                 End If  
  22.             Next  
  23.               
  24.             '如果没有更新,值为""  
  25.             If Not isUpdate Then  
  26.                 Cells(r, c + 1).Value = ""  
  27.             End If  
  28.        Next  
  29.     Next  
  30. End Sub  

 

表一代码:

[vb] view plain copy
  1. Private Sub Worksheet_Change(ByVal Target As Range)  
  2.   
  3. If Target.Row = Selection.Row - 1 And Target.Column = Selection.Column Or Target.Row = Selection.Row And Target.Column = Selection.Column - 1 Then  
  4.     '修改立即获取成绩  
  5.     CellsClick Target  
  6. End If  
  7.   
  8. End Sub  
  9.   
  10. Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
  11.     '点击时获取成绩  
  12.     CellsClick Target  
  13. End Sub  


    至此,简单的宏和VBA实例已经讲完了,复杂的问题简单化了吧!所以当你遇到在Excel中需要不断重复一些操作时,就应该考虑使用宏和VBA来解决了,非常方便,更重要的是节省时间呀!


原文来自:http://blog.csdn.net/small_baby01/article/details/22438103

原创粉丝点击