教你高速入门Excel-宏与VBA(续)
引言
通过上次的解说(教你高速入门(上))(教你高速入门(下))。相信一些简单的问题大家已经能够使用宏和VBA来攻克了。那假设遇到大数据时怎么办?在日常生活中我们须要处理的可不止简单的一两张表,非常可能是20。30张表甚至很多其它!假设你遇到这种问题不要着急,这里我就来给大家解说一下Excel中的大数据处理问题。
实例
接着上次简单演示样例来说,假设如今须要处理的表单不再是一个,而是多个,比如,须要统计多个年龄段的篮球运动员其身体素养成绩,那么原先的代码就不能实现了。由于之前的sheet名已经写“死”,仅仅能是特定附表的数据。当然解决问题也非常easy,仅仅要简单的改动一下代码,使其自己主动获得当前表(所需表)的sheet名,然后把sheet名作为參数传递就可以。
OK,改动代码例如以下:
模块代码:
Option Explicit
'激活时,<span style="font-family: KaiTi_GB2312; ">求和,</span><span style="font-family: KaiTi_GB2312; ">自己主动获取所有成绩</span>
Public Sub WorksheetActivate()
Dim selectedCol As Integer
Dim r As Integer
Dim c As Integer
Dim j As Integer
Dim isUpdate As Boolean
Dim FileName As String
FileName = GetName() + "附"
'行循环
For r = 5 To ActiveSheet.UsedRange.Rows.Count
'列循环
For c = 4 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2
isUpdate = False
selectedCol = (c - 4) \ 2 + 2 '获取 当前表附表 中相应列号
For j = 2 To Worksheets(FileName).UsedRange.Rows.Count
If ActiveSheet.Cells(r, c).Value <> "" And ActiveSheet.Cells(r, c).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then
ActiveSheet.Cells(r, c + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value
isUpdate = True
End If
Next
'假设没有更新。值为""
If Not isUpdate Then
ActiveSheet.Cells(r, c + 1).Value = ""
End If
Cells(r, c + 1).Select
Next
Next
End Sub
'点击时,获取成绩
Public Sub CellsClick(ByVal Target As Range)
Dim FileName As String
FileName = GetName() + "附"
'仅仅能选择(5,4)到有效表格的区域。否则跳过
If Target.Column < 4 Or Target.Row < 5 Or Target.Column > ActiveSheet.UsedRange.Columns.Count - 1 Or Target.Row > ActiveSheet.UsedRange.Rows.Count Then
Exit Sub
End If
Dim selectedCol As Integer
Dim j As Integer
Dim isUpdate As Boolean
selectedCol = (Target.Column - 4) \ 2 + 2 '获取 <span style="font-family: KaiTi_GB2312; ">当前表附表</span><span style="font-family: KaiTi_GB2312; "> 中相应列号</span>
If Target.Column Mod 2 = 0 Then
'行循环
For j = 2 To Worksheets(FileName).UsedRange.Rows.Count Step 1
If ActiveSheet.Cells(Target.Row, Target.Column).Value <> "" And ActiveSheet.Cells(Target.Row, Target.Column).Value = Worksheets(FileName).UsedRange.Cells(j, selectedCol).Value Then
ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = Worksheets(FileName).UsedRange.Cells(j, 1).Value
isUpdate = True
End If
Next
If Not isUpdate Then
ActiveSheet.Cells(Target.Row, Target.Column + 1).Value = ""
End If
End If
'列循环。自己主动求和
Dim sum As Double
sum = 0
For j = 5 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2
sum = sum + Val(ActiveSheet.Cells(Target.Row, j).Value)
Next
ActiveSheet.Cells(Target.Row, ActiveSheet.UsedRange.Columns.Count).Value = sum
End Sub
<span style="color:#ff0000;">
</span>'获取当前操作的文件名
Private Function GetName() As String
GetName = ActiveSheet.Name
End Function
主表代码:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Selection.Row - 1 And Target.Column = Selection.Column Or Target.Row = Selection.Row And Target.Column = Selection.Column - 1 Then
'改动马上获取成绩
CellsClick Target
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'点击时获取成绩
CellsClick Target
End Sub
总结
多表操作思想:
1.多表操作时要注意分类,一般各表之间不是孤立存在的。把同类型(比方按性别分类。按年龄段分类,按年级 分类)放到一个Excel里去处理;
2.一个Excel中多表之间操作要注意參数传递,数据获取方式和激活问题,多做測试。
优化思想:
一项工作反复多遍时,肯定能够优化,优化方式非常easy。提取公共部分!
教你高速入门Excel-宏与VBA(续)的更多相关文章
- VBA续嘘嘘——宏技巧集绵
什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...
- Excel中使用VBA访问Access数据库
VBA访问Access数据库 1. 通用自动化语言VBA VBA(Visual Basic For Application)是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义 ...
- 在Excel里用vba给合并的单元格添加注释
Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...
- Windows下FFmpeg高速入门
本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...
- Excel宏录制、数据透视表、合并多个页签
前段时间做数据分析的时候,遇到很多报表文件需要处理,在此期间学习了很多Excel操作,特此做笔记回顾. Excel宏录制 打开开发者工具 打开Excel文件,选择”文件”-->“选项”--> ...
- Tensorflow高速入门2--实现手写数字识别
Tensorflow高速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow 版本号:0.12.0(仅使用cpu下) Tensorflow安装见: http://b ...
- C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- Swift高速入门之函数
函数 看一个函数的样例: func addNumbers( let a:Int,let b:Int)->Int{ return a+b; } 实现两个数相加.函数必须以func开头,后面是函数名 ...
- C语言高速入门系列(八)
C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...
随机推荐
- Powershell对象选择,排序和变量存储
PowerShell基础教程(17)——对象的选择.排序和变量存储 可以使用 Select-Object cmdlet 来创建新的.自定义的 Windows PowerShell 对象,后者包含的属性 ...
- 初识layer遮罩层
背景:楼主做了一个先删除数据再插入的功能,但是狂点菜单的时候会有重复数据插入进来,设置字段unique之后,再狂点,控制台也会报错. 为了防止这种问题出现,我采取了制止”狂点“这种行为出现的做法,所以 ...
- 在Linux系统上查看Apache服务器的错误日志
错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器.根据你 Web 服务器配置的不 ...
- Zookeeper实战
这里的实战主要是用Java API对Zookeeper进行相应的操作,来实现我们的业务需求.首先简单地测试一下Zookeeper节点的增删改查操作,然后测试两个例子,分别是分布式应用HA以及分布式锁. ...
- 从TensorFlow0.12升级到TensorFlow1.13
sudo pip install --upgrade tensorflow-gpu $ sudo pip install --upgrade tensorflow-gpu[sudo] password ...
- 在java语言中int 和 Integer 有什么区别
在java语言中int 和 Integer 有什么区别 解答:int是基本数据类型,Integer是int的包装类,属于引用类型
- CocosCreate 与 Netty 开发斗地主 (一步一步开发)
CocosCreate 与 Netty 开发斗地主 开发此教程的目的是为了教会大家基本的使用Netty,通过一个小例子来教会大家制作斗地主游戏服务器,采用WebSocket方式! 目前正在制作阶段, ...
- Axure9 v9.0.0.3629 ~ v9.0.0.3633 授权密钥 【2019.02.05】
现在提供一个支持v9.0.0.3629.v9.0.0.3630.v9.0.0.3631.v9.0.0.3632.v9.0.0.3633的授权码(后续的Beta更新版本应该能继续使用) 被授权人:zd4 ...
- Linux命令下,cp,rm,mv命令的使用
Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制 cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件对比两文件的新旧而予以更新, 以 ...
- 【Raspberry pi】GPIO使用指南
http://www.cnblogs.com/qtsharp/archive/2013/02/28/2936800.html 树莓派RaspberryPi的RPi.GPIO使用指南 Python操 ...