20190102xlVBA_多表按姓名同时拆分
Sub 多表按姓名同时拆分20190102()
AppSettings
Dim StartTime As Variant
Dim UsedTime As Variant
StartTime = VBA.Timer
On Error GoTo ErrHandler
Dim fRng As Range
Dim Wb As Workbook
Dim Sht As Worksheet
Dim OneSht As Worksheet, OneName, OneKey
Dim dic As Object, HeadRow, SplitCol, Staff
Dim dName As Object
Dim NewWb As Workbook
Dim Newsht As Worksheet Set dic = CreateObject("Scripting.Dictionary")
Set dName = CreateObject("Scripting.Dictionary")
Set Wb = Application.ThisWorkbook For Each OneSht In Wb.Worksheets
If OneSht.Visible = xlSheetVisible Then
With OneSht
If .FilterMode Then .Cells.AutoFilter
'On Error Resume Next
Set fRng = .UsedRange.Find("拆分姓名", , , xlPart)
If fRng Is Nothing Then
dic(.Name) = "save"
Else
info = fRng.Address(0, 0)
dic(.Name) = info
'Debug.Print "需要拆分的表格为 [" & .Name & "]"
SplitCol = RegGet(info, "(\D+)")
HeadRow = CLng(RegGet(info, "(\d+)"))
EndRow = .Cells(.Cells.Rows.Count, SplitCol).End(xlUp).Row
For i = HeadRow + 1 To EndRow
Staff = .Cells(i, SplitCol).Value
dName(Staff) = ""
Next i
End If
End With
End If
Next OneSht counter = 0
For Each OneName In dName.Keys
counter = counter + 1
FileName = OneName & ".xlsx"
FolderPath = Wb.Path & "\"
FilePath = FolderPath & FileName
Set NewWb = Application.Workbooks.Add
On Error Resume Next
Kill FilePath
On Error GoTo 0
NewWb.SaveAs FilePath
For Each OneKey In dic.Keys
Debug.Print "正在为 [" & OneName & "] 拆分工作表 [" & OneKey & " ]"
If dic(OneKey) = "save" Then
Set OneSht = Wb.Worksheets(OneKey)
OneSht.Copy after:=NewWb.Worksheets(NewWb.Worksheets.Count) Else
'进行拆分
Set Newsht = NewWb.Worksheets.Add(after:=NewWb.Worksheets(NewWb.Worksheets.Count))
Newsht.Name = OneKey Set OneSht = Wb.Worksheets(OneKey)
info = dic(OneKey)
SplitCol = RegGet(info, "(\D+)") HeadRow = CLng(RegGet(info, "(\d+)"))
With OneSht
SplitNo = .Cells(1, SplitCol).Column
If .FilterMode = True Then .Cells.AutoFilter
EndCol = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
Set Rng = .Range("A" & HeadRow).Resize(1, EndCol)
Rng.AutoFilter Field:=SplitNo, Criteria1:=OneName
Set Rng = .UsedRange.SpecialCells(xlCellTypeVisible)
Rng.Copy Newsht.Range("A1")
If .FilterMode = True Then .Cells.AutoFilter
End With
End If
Next OneKey NewWb.Save
NewWb.Close True
'If counter = 3 Then Exit For
Next OneName Set dic = Nothing
Set dName = Nothing
Set Wb = Nothing
Set NewWb = Nothing
Set Sht = Nothing
Set OneSht = Nothing
Set Newsht = Nothing
Set Rng = Nothing
UsedTime = VBA.Timer - StartTime
Debug.Print "UsedTime :" & Format(UsedTime, "#0.0000 Seconds")
MsgBox "共拆分" & counter & "人,用时 :" & Format(UsedTime, "#0.00秒。")
ErrorExit:
AppSettings False
Exit Sub
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "AuthorQQ 84857038"
Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If
End Sub
Private Function RegGet(ByVal OrgText As String, ByVal Pattern As String) As String
Dim Regex As Object
Dim Mh As Object
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.Pattern = Pattern
End With
If Regex.test(OrgText) Then
Set Mh = Regex.Execute(OrgText)
RegGet = Mh.Item(0).submatches(0)
Else
RegGet = ""
End If
Set Regex = Nothing
End Function
Private Sub AppSettings(Optional IsStart As Boolean = True)
Application.ScreenUpdating = IIf(IsStart, False, True)
Application.DisplayAlerts = IIf(IsStart, False, True)
Application.Calculation = IIf(IsStart, xlCalculationManual, xlCalculationAutomatic)
Application.StatusBar = IIf(IsStart, ">>>>>>>>Macro Is Running>>>>>>>>", False)
End Sub
20190102xlVBA_多表按姓名同时拆分的更多相关文章
- C#将一个excel工作表根据指定范围拆分为多个excel文件
C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...
- 数据库分库分表(sharding)系列(一) 拆分规则
第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 拆分表、联系方式的拆分?
当用户数据有接近10万时,而且多表的关联也比较频繁时,能把大表拆为小表,也会提高系统的性能,I/O.运算性能.当然以后用户数据会更大可能会到30-40万以上,所有有能力时适当拆表,分分合合,合合分分也 ...
- 转数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...
- 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...
- 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...
- 45.oracle表类型、数据拆分、表分区
不要做一些没有意义的事情,就比如说你要离职并不打算吃回头草,离职理由中完全没有必要说明“领导的水平太渣,人品太差”此类的原因,而是“个人原因”,当然实在不批准辞职另说. oracle表类型 表的类型分 ...
- help_topic表,以字符拆分,一行转多行
help_topic表是数据库mysql下的一个表 SUBSTRING_INDEX(s, delimiter, number) 返回从字符串 s 的第 number 个 ...
- mysql建表时拆分出常用字段和不常用字段
一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住 ...
随机推荐
- 【Python31--pickle函数】
一.含义 1.pickle的实质是什么 答:利用一些算法把数据对象转换成“二进制文件”,存储在硬盘上,当然也可以放在数据库或者是另外一台计算机上 2.存放:picking,读取:unpicking 3 ...
- topcoder srm 703 div1 -3
1.给出一个包含$n$个元素的数组$x$,构造出一个有向无环图满足从节点$i$出发可以访问到的节点数为$x_{i}$. 思路:按照$x$从小到大排序.然后从前向后处理,当前节点依次与前面已经处理的节点 ...
- MongoDB ReplicaSet 集群搭建
说明 本文创建的集群的名字为test,在同一台机器上创建了三个mongo实例,端口不同即可. 安装mongodb的教程,之前总结过,请参考:CentOS安装MongoDB笔记 创建实例 # 本机默认原 ...
- Sublime Text3--安装使用教程资料整理
Sublime Text快捷键: Ctrl + ←/→进行逐词移动,相应的,Ctrl + Shift + ←/→进行逐词选择. Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中 ...
- 振兴中华|2013年蓝桥杯A组题解析第三题-fishers
标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛 ...
- 【做题】CF239E. k-d-sequence——线段树
首先,容易得到判断一个子串为"good k-d sequence"的方法: 子串中没有重复元素,且所有元素模d相等. 记mx为除以d的最大值,mn为除以d的最小值,则\(mx-mn ...
- (转载)MySQl数据库-批量添加数据的两种方法
方法一:使用excel表格 方法二:使用insert语句(FileWriter批量写入) 使用excel表格 1.打开数据表,按照表的字段在excel中添加数据.注意:表中字段名必须和excel中的名 ...
- Python实现机器学习算法:K近邻算法
''' 数据集:Mnist 训练集数量:60000 测试集数量:10000(实际使用:200) ''' import numpy as np import time def loadData(file ...
- Kafka、RabbitMQ、RocketMQ等消息中间件的对比
Kafka 是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目.Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输.0 ...
- ETCD应用
etcd:从应用场景到实现原理的全方位解读 ETCD:A highly-available key value store for shared configuration and service d ...