教你高速入门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语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...
随机推荐
- C1编译器的实现
总览 词法.语法分析 分析方案 词法 语法 符号表 类型系统 AST 语义检查 EIR代码生成器 MIPS代码生成器 寄存器分配 体系结构相关特性优化 使用说明 编译 运行 总览 C1语言编译器及流程 ...
- sqlmap里如何添加字典
在sqlmap的目录下有那么一个目录.即"TXT"目录. 该目录下是放字典的. 我在日一个站的时候没有破解出表明.然后不小心下载到了数据库. sqlmap无法猜出表是啥.ps:ac ...
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】
Medium完整代码: <?php if (isset($_GET['Change'])) { // Checks the http referer header if ( eregi ( &q ...
- 初识layer遮罩层
背景:楼主做了一个先删除数据再插入的功能,但是狂点菜单的时候会有重复数据插入进来,设置字段unique之后,再狂点,控制台也会报错. 为了防止这种问题出现,我采取了制止”狂点“这种行为出现的做法,所以 ...
- [Tips]Javascrip计算文件行数
function calcLineCount(filename, callback) { var fs = require('fs'); var fileStream = fs.createReadS ...
- CI 跳转
redirect('home/play/index');
- 虚拟机Ubuntu系统下kaldi安装与编译简介
kaldi官网:http://www.kaldi-asr.org/doc/index.html 在http://github.com/kaldi-asr/kaldi中直接下载kaldi的zip包,没有 ...
- python 糗事百科实例
爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个 ...
- RedHat Ent 6.5 64bit编译安装hadoop2.4.1
RedHat Ent 6.5 64bit编译安装hadoop2.4.1 感谢原帖:http://blog.csdn.net/w13770269691/article/details/16883663/ ...
- 蓝桥杯 第三届C/C++预赛真题(8) 密码发生器(水题)
在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如果设置不好记的密码,又担心自己也会忘记:如果写在纸上,担心纸张被别人发现或弄丢了... 这个程 ...