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_多表按姓名同时拆分的更多相关文章

  1. C#将一个excel工作表根据指定范围拆分为多个excel文件

    C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...

  2. 数据库分库分表(sharding)系列(一) 拆分规则

    第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...

  3. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 拆分表、联系方式的拆分?

    当用户数据有接近10万时,而且多表的关联也比较频繁时,能把大表拆为小表,也会提高系统的性能,I/O.运算性能.当然以后用户数据会更大可能会到30-40万以上,所有有能力时适当拆表,分分合合,合合分分也 ...

  4. 转数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  5. 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  6. 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  7. 45.oracle表类型、数据拆分、表分区

    不要做一些没有意义的事情,就比如说你要离职并不打算吃回头草,离职理由中完全没有必要说明“领导的水平太渣,人品太差”此类的原因,而是“个人原因”,当然实在不批准辞职另说. oracle表类型 表的类型分 ...

  8. help_topic表,以字符拆分,一行转多行

      help_topic表是数据库mysql下的一个表        SUBSTRING_INDEX(s, delimiter, number)        返回从字符串 s 的第 number 个 ...

  9. mysql建表时拆分出常用字段和不常用字段

    一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住 ...

随机推荐

  1. com.fasterxml.jackson.databind.JsonMappingException

    背景 在搭建SSM整合activiti项目时,在查找activiti定义的流程模板时,前台不能够接受到ProcessDefinition这个对象. 原因 ProcessDefinition是一个接口, ...

  2. Python3 tkinter基础 Entry get 点击按钮 将输入框中文字输出到控制台

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. Python3基础 list len 输出元素的个数

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. git用法-打补丁【转】

    本文转载自:https://www.cnblogs.com/yandufeng/p/5580765.html 1. git cherry-pick 作用:从一个branch上选择一个commit,添加 ...

  5. (转)WebSocket学习

    石墨文档:https://shimo.im/docs/3UkyOPJvmj4f9EAP/ (二期)17.即时通讯技术websocket [课程17]java We...实现.xmind0.1MB [课 ...

  6. SP3946 MKTHNUM - K-th Number(整体二分)

    思路 整体二分的板子题,没什么思路好说 代码 #include <cstdio> #include <algorithm> #include <cstring> u ...

  7. [CodeForces - 276A] Lunch Rush

    题目链接:http://codeforces.com/problemset/problem/276/A 从这n个输入中求最大值,注意 和 k的比较,定义一个maxn,对每个输入进行计算即可. AC代码 ...

  8. 精通正则表达式(第三版)—Mastering Regular Expressions,3rd Edition—读书笔记2

    1.肯定断言:必须匹配一个字符 排除型字符组:匹配未列出字符的字符组 2.范围表示法——列出范围内所有的字符 大多数情况下,不会影响执行速度.但是,某些实现方式不能完全优化字符组.所以,最好是有范围表 ...

  9. Latex: 使 tabular 居中

    参考: How to center the table in Latex Latex: 使 tabular 居中 解决方法1: { \centering \begin{tabular} ... \en ...

  10. 4、My Scripts

    脚本目录列表 1.在windows编写的shell脚本利用dos2unix命令格式化一下(P308) 2.bash命令参数调试(P309) 3.使用set命令调试部分脚本内容(P312) 4.开发脚本 ...