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

10 篇文章 3 订阅

引言    

    通过上次的讲解(教你快速入门(上))(教你快速入门(下)),相信一些简单的问题大家已经可以使用宏和VBA来解决了,那如果遇到大数据时怎么办?在日常生活中我们需要处理的可不止简单的一两张表,很可能是20,30张表甚至更多!如果你遇到这样的问题不要着急,这里我就来给大家讲解一下Excel中的大数据处理问题。

实例

    接着上次简单示例来说,如果现在需要处理的表单不再是一个,而是多个,例如,需要统计多个年龄段的篮球运动员其身体素质成绩,那么原先的代码就不能实现了,因为之前的sheet名已经写“死”,只能是特定附表的数据,当然解决这个问题也很简单,只要简单的修改一下代码,使其自动获得当前表(所需表)的sheet名,然后把sheet名作为参数传递即可。OK,修改代码如下:

    模块代码:

[vb]  view plain  copy
  1. Option Explicit  
  2.   
  3. '激活时,<span style="font-family: KaiTi_GB2312; ">求和,</span><span style="font-family: KaiTi_GB2312; ">自动获取全部成绩</span>  
  4. Public Sub WorksheetActivate()  
  5.   
  6.     Dim selectedCol As Integer  
  7.     Dim r As Integer  
  8.     Dim c As Integer  
  9.     Dim j As Integer  
  10.     Dim isUpdate As Boolean  
  11.     Dim FileName As String  
  12.       
  13.     FileName = GetName() + "附"  
  14.       
  15.     '行循环  
  16.     For r = 5 To ActiveSheet.UsedRange.Rows.Count  
  17.   
  18.        '列循环  
  19.        For c = 4 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2  
  20.             isUpdate = False  
  21.             selectedCol = (c - 4) \ 2 + 2 '获取 当前表附表 中对应列号  
  22.             For j = 2 To Worksheets(FileName).UsedRange.Rows.Count  
  23.                 If ActiveSheet.Cells(r, c).Value <> "" And ActiveSheet.Cells(r, c).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then  
  24.                     ActiveSheet.Cells(r, c + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value  
  25.                     isUpdate = True  
  26.                 End If  
  27.             Next  
  28.               
  29.             '如果没有更新,值为""  
  30.             If Not isUpdate Then  
  31.                 ActiveSheet.Cells(r, c + 1).Value = ""  
  32.             End If  
  33.             Cells(r, c + 1).Select  
  34.        Next  
  35.     Next  
  36. End Sub  
  37.   
  38.   
  39.   
  40. '点击时,获取成绩  
  41. Public Sub CellsClick(ByVal Target As Range)  
  42.   
  43.     Dim FileName As String  
  44.     FileName = GetName() + "附"  
  45.   
  46.     '只能选择(5,4)到有效表格的区域,否则跳过  
  47.     If Target.Column < 4 Or Target.Row < 5 Or Target.Column > ActiveSheet.UsedRange.Columns.Count - 1 Or Target.Row > ActiveSheet.UsedRange.Rows.Count Then  
  48.         Exit Sub  
  49.     End If  
  50.       
  51.     Dim selectedCol As Integer  
  52.     Dim j As Integer  
  53.     Dim isUpdate As Boolean  
  54.       
  55.     selectedCol = (Target.Column - 4) \ 2 + 2  '获取 <span style="font-family: KaiTi_GB2312; ">当前表附表</span><span style="font-family: KaiTi_GB2312; "> 中对应列号</span>  
  56.   
  57.     If Target.Column Mod 2 = 0 Then  
  58.         '行循环  
  59.         For j = 2 To Worksheets(FileName).UsedRange.Rows.Count Step 1  
  60.             If ActiveSheet.Cells(Target.Row, Target.Column).Value <> "" And ActiveSheet.Cells(Target.Row, Target.Column).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then  
  61.                 ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value  
  62.                 isUpdate = True  
  63.             End If  
  64.         Next  
  65.           
  66.         If Not isUpdate Then  
  67.            ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = ""  
  68.         End If  
  69.     End If  
  70.      
  71.       
  72.      '列循环,自动求和  
  73.     Dim sum As Double  
  74.      sum = 0  
  75.     For j = 5 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2  
  76.         sum = sum + Val(ActiveSheet.Cells(Target.Row, j).Value)  
  77.     Next  
  78.     ActiveSheet.Cells(Target.Row, ActiveSheet.UsedRange.Columns.Count).Value = sum  
  79. End Sub  
  80.   
  81. <span style="color:#ff0000;">  
  82. </span>'获取当前操作的文件名称  
  83. Private Function GetName() As String  
  84.     GetName = ActiveSheet.Name  
  85. End Function  

    主表代码:

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


总结

    多表操作思想:

    1.多表操作时要注意分类,一般各表之间不是孤立存在的,把同类型(比如按性别分类,按年龄段分类,按年级 分类)放到一个Excel里去处理;

    2.一个Excel中多表之间操作要注意参数传递,数据获取方式和激活问题,多做测试

    优化思想:

    一项工作重复多遍时,肯定可以优化,优化方式很简单,提取公共部分!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值