版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/small_baby01/article/details/24028407

引言    

    通过上次的解说(教你高速入门(上))(教你高速入门(下))。相信一些简单的问题大家已经能够使用宏和VBA来攻克了。那假设遇到大数据时怎么办?在日常生活中我们须要处理的可不止简单的一两张表,非常可能是20。30张表甚至很多其它!假设你遇到这种问题不要着急,这里我就来给大家解说一下Excel中的大数据处理问题。

实例

    接着上次简单演示样例来说,假设如今须要处理的表单不再是一个,而是多个,比如,须要统计多个年龄段的篮球运动员其身体素养成绩,那么原先的代码就不能实现了。由于之前的sheet名已经写“死”,仅仅能是特定附表的数据。当然解决问题也非常easy,仅仅要简单的改动一下代码,使其自己主动获得当前表(所需表)的sheet名,然后把sheet名作为參数传递就可以。

OK,改动代码例如以下:

    模块代码:

  1. Option Explicit
  2. '激活时,<span style="font-family: KaiTi_GB2312; ">求和,</span><span style="font-family: KaiTi_GB2312; ">自己主动获取所有成绩</span>
  3. Public Sub WorksheetActivate()
  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. Dim FileName As String
  10. FileName = GetName() + "附"
  11. '行循环
  12. For r = 5 To ActiveSheet.UsedRange.Rows.Count
  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(FileName).UsedRange.Rows.Count
  18. If ActiveSheet.Cells(r, c).Value <> "" And ActiveSheet.Cells(r, c).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then
  19. ActiveSheet.Cells(r, c + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value
  20. isUpdate = True
  21. End If
  22. Next
  23. '假设没有更新。值为""
  24. If Not isUpdate Then
  25. ActiveSheet.Cells(r, c + 1).Value = ""
  26. End If
  27. Cells(r, c + 1).Select
  28. Next
  29. Next
  30. End Sub
  31. '点击时,获取成绩
  32. Public Sub CellsClick(ByVal Target As Range)
  33. Dim FileName As String
  34. FileName = GetName() + "附"
  35. '仅仅能选择(5,4)到有效表格的区域。否则跳过
  36. If Target.Column < 4 Or Target.Row < 5 Or Target.Column > ActiveSheet.UsedRange.Columns.Count - 1 Or Target.Row > ActiveSheet.UsedRange.Rows.Count Then
  37. Exit Sub
  38. End If
  39. Dim selectedCol As Integer
  40. Dim j As Integer
  41. Dim isUpdate As Boolean
  42. selectedCol = (Target.Column - 4) \ 2 + 2 '获取 <span style="font-family: KaiTi_GB2312; ">当前表附表</span><span style="font-family: KaiTi_GB2312; "> 中相应列号</span>
  43. If Target.Column Mod 2 = 0 Then
  44. '行循环
  45. For j = 2 To Worksheets(FileName).UsedRange.Rows.Count Step 1
  46. If ActiveSheet.Cells(Target.Row, Target.Column).Value <> "" And ActiveSheet.Cells(Target.Row, Target.Column).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then
  47. ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value
  48. isUpdate = True
  49. End If
  50. Next
  51. If Not isUpdate Then
  52. ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = ""
  53. End If
  54. End If
  55. '列循环。自己主动求和
  56. Dim sum As Double
  57. sum = 0
  58. For j = 5 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2
  59. sum = sum + Val(ActiveSheet.Cells(Target.Row, j).Value)
  60. Next
  61. ActiveSheet.Cells(Target.Row, ActiveSheet.UsedRange.Columns.Count).Value = sum
  62. End Sub
  63. <span style="color:#ff0000;">
  64. </span>'获取当前操作的文件名
  65. Private Function GetName() As String
  66. GetName = ActiveSheet.Name
  67. End Function

    主表代码:

  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  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. End Sub
  8. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  9. '点击时获取成绩
  10. CellsClick Target
  11. End Sub

总结

    多表操作思想:

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

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

    优化思想:

    一项工作反复多遍时,肯定能够优化,优化方式非常easy。提取公共部分!

教你高速入门Excel-宏与VBA(续)的更多相关文章

  1. VBA续嘘嘘——宏技巧集绵

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  2. Excel中使用VBA访问Access数据库

    VBA访问Access数据库 1. 通用自动化语言VBA VBA(Visual Basic For Application)是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义 ...

  3. 在Excel里用vba给合并的单元格添加注释

    Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...

  4. Windows下FFmpeg高速入门

    本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...

  5. Excel宏录制、数据透视表、合并多个页签

    前段时间做数据分析的时候,遇到很多报表文件需要处理,在此期间学习了很多Excel操作,特此做笔记回顾. Excel宏录制 打开开发者工具 打开Excel文件,选择”文件”-->“选项”--> ...

  6. Tensorflow高速入门2--实现手写数字识别

    Tensorflow高速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow 版本号:0.12.0(仅使用cpu下) Tensorflow安装见: http://b ...

  7. C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  8. Swift高速入门之函数

    函数 看一个函数的样例: func addNumbers( let a:Int,let b:Int)->Int{ return a+b; } 实现两个数相加.函数必须以func开头,后面是函数名 ...

  9. C语言高速入门系列(八)

    C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...

随机推荐

  1. spring mvc RedirectAttributes

    org.springframework.web.servlet.mvc.support.RedirectAttributes org.springframework.web.servlet.mvc.s ...

  2. 让一个 csproj 项目指定多个开发框架[转]

    原贴:https://walterlv.gitee.io/post/configure-projects-to-target-multiple-platforms.html 可移植类库.共享项目..N ...

  3. VSCode 创建项目常用命令

    对 http://www.bkjia.com/Asp_Netjc/1233276.html 的补充 1. 创建HelloWorld.Solutions目录并且在此目录中创建sln解决方案 例:dotn ...

  4. jQuery 实战读书笔记之第二章:选择元素

    基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...

  5. glibc中malloc的详细解释_转

    glibc中的malloc实现: The main properties of the algorithms are:* For large (>= 512 bytes) requests, i ...

  6. 临界区(Critical Section)的封装和使用示例

    向我老大致敬! 这个做法其实是抄我老大的.服务器中,多线程经常需要使用临界区,为了简化代码的使用,把临界区封装为 CThreadLockHandle  类,通过封装,使用临界区资源每次只需要一行代码, ...

  7. 【Raspberry Pi】修改时区

    Raspberry Pi没有时钟模块,所以每次断电都会丢失时间,但它有联网获取时间的预设.但要修改默认时区 http://outofmemory.cn/code-snippet/2899/shumei ...

  8. 【Raspberry pi】python ide-spyder

    sudo apt-get install spyder 简单 明了

  9. Django 后台 无法显示文章标题

    我们会发现所有的文章都是叫 **object,这样肯定不好,比如我们要修改,如何知道要修改哪个呢? 我们修改一下 blog 中的models.py # coding:utf-8 from django ...

  10. Android获取 应用程序大小,数据大小,缓存大小

    在项目中创建,android.content.pm 包名.里面创建两个aidl文件.PackageStats.aidl  和 IPackageStatsObserver.aidl. PackageSt ...