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. 【python004-分支循环】

    一.条件分支 1.第一个改进要求:游戏猜错的时候程序提示用户当前的输入比答案大了还是小了 python的比较操作符: >         左边大于右边 >=       左边大于等于右边 ...

  2. grub基本应用

    一.基本概念 GRUB(boot  loader):  GRand Unified Bootloader 两个版本: grub .x: grup legacy grub .x: grub2 grub ...

  3. SpringBoot 通过token进行身份验证,存储redis

    代码: public interface TokenManager { /** * 创建token * @param userInfo * @return */ String getToken(Use ...

  4. Elasticsearch 异常处理

    cluster_block_exception https://stackoverflow.com/questions/50609417/elasticsearch-error-cluster-blo ...

  5. centos7重新调整分区大小

    As others have pointed out, XFS filesystem cannot be shrunk. So your best bet is to backup /home, re ...

  6. oracle 之 连接查询

    where 连接 select * from a,b //使用的是笛卡尔乘积  显示 a.count*b.count 条数 select * from a,b where a.id=b.id 其实只是 ...

  7. [java变量] - 字符串数组转long型数组

    //定义字符串 String str = "1,3,6,9,4,2,1,6"; //截取字符串 String[] strArr = str.split(",") ...

  8. Kubernetes之容器

    Images You create your Docker image and push it to a registry before referring to it in a Kubernetes ...

  9. Linux 下终端 C 语言控制光标的技巧

    // 清除屏幕 #define CLEAR() printf("\033[2J") // 上移光标 #define MOVEUP(x) printf("\033[%dA& ...

  10. 20165306 实验一Java开发环境的熟悉

    Java开发环境的熟悉 实验报告封面 实验内容与步骤 Java开发环境的熟悉-1 1.建立"自己学号exp1"的目录 2.在"自己学号exp1"目录下建立src ...