一、合并工作簿
Sub 合并工作簿()
   Application.ScreenUpdating = False
    myfile = Dir(ThisWorkbook.Path & "\*.xls*")'Dir函数,获取同路径下待合并excel的文件名
    Do While myfile <> ""  '当文件名不为空的时候,继续运行,如果为空,说明表格已经循环一个遍了
          If myfile <> ThisWorkbook.Name Then'在文件名不为空的前提下,还不能是代码所在的汇总工作簿
              Set wb = Workbooks.Open(ThisWorkbook.Path & "" & myfile)
              For m = 1 To wb.Worksheets.Count '对待汇总的工作簿中所有worksheet做循环
              rrow = wb.Worksheets(m).UsedRange.Rows.Count
              wb.Worksheets(m).Range("a1:d" & rrow).Copy ThisWorkbook.Worksheets(1).Cells(Rows.Count, "a").End(xlUp).Offset(1, 0)
              Next
              Workbooks(myfile).Close False'复制完数据以后,分表关闭,不保存。
          Else
        End If
       myfile = Dir '获取下一个待汇总工作簿的文件名
     
    Loop
   Application.ScreenUpdating = True
    MsgBox "完成"
End Sub
 
绿色部分为按自己需要修改的代码。文中代码框架是汇总A:D列内容。
这里着重说一下:代码使用环境是待合并工作簿和代码工作簿在同一个路径下。
 
Sub 合并工作簿()
   Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogFolderPicker) '创建一个浏览文件夹的对话框
       If .Show = -1 Then PathSht = .SelectedItems(1) Else Exit Sub
    End With
   源代码,省略不写了,记得把"ThisWorkbook.Path"改为"PathSht"     
    ....
End Sub
 
二、拆分工作簿
这段代码可以实现对工作簿任意列的拆分。(对某一列相同内容的所在行挑出来,汇总到一个新建工作簿里面)
Sub 拆分工作簿()
   Application.ScreenUpdating = False '关闭屏幕闪动,提速
   Application.DisplayAlerts = False '关闭窗口提示
    kk = 2
    Set dic = CreateObject("scripting.dictionary")
    With ThisWorkbook.Worksheets("待拆分的Sheet名")'根据自己的工作簿自行修改
       cln = InputBox("请输入需要按列拆分的列:" & Chr(10) & "英文列标", "输入列标", "A") 'inputbox提示输入需要拆分的列标
       cln2 = .Range("a1").End(xlToRight).Column '获取最大列数,为了增加通用性
       If .Range(cln & 2) = "" Then Exit Sub
       rrow = .Cells(Rows.Count, cln).End(xlUp).Row
       arr = WorksheetFunction.Transpose(.Range(cln & 1 & ":" & cln & rrow))
       For i = 1 To UBound(arr) '将拆分条件列数据写入字典,为了去重复。
           If Not dic.exists(arr(i)) Then '若字典中不存在该字符串,则写入。
           dic.Add arr(i), .Range("a" & i).Resize(1, cln2)
       Else
           Set dic.Item(arr(i)) = Union(dic.Item(arr(i)), .Range("a" & i).Resize(1, cln2))
       End If
    Next
    k = dic.keys
    l = dic.items
    For ss = 0 To dic.Count - 1
       Set wb = Workbooks.Add '新建工作簿
       With wb.Worksheets(1)
           l(ss).Copy .Range("a1")
       End With
       wb.SaveAs ThisWorkbook.Path & "" & k(ss) & ".xlsx" '将新建的工作簿保存在代码工作簿下
       wb.Close True '关闭工作簿,并保存
       Set wb = Nothing '释放内存
    Next
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "完成"
End Sub
 
上述代码默认从第一行拆分,如果有标题行不想拆分,可以把上述下句代码修改一下。
arr = WorksheetFunction.Transpose(.Range(cln & 1 & ":" & cln & rrow)),从哪一行开始拆分,就把1修改为行号
 
三、合并工作表(Sheet)
合并同一个工作簿下所有Sheet到一个Sheet里面就比较简单了。
Sub 合并当前工作簿下的所有Sheet()
Application.ScreenUpdating = False
For j = 1 To Sheets.Count
   If Sheets(j).Name <> ActiveSheet.Name Then
      X = Range("A65536").End(xlUp).Row + 1
      Sheets(j).UsedRange.Copy Cells(X, 1)'默认复制所有内容
   End If
Next
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"
End Sub
默认复制所有内容,如果有特定需要,自己修改这部分代码Sheets(j).UsedRange.Copy Cells(X, 1)'默认复制所有内容。
 
四、拆分工作表(Sheet)
Sub 拆分表格()
    Set d = CreateObject("scripting.dictionary")
    With Worksheets(1)
       rrow = .Cells(Rows.Count, "a").End(3).Row
       For i = 2 To rrow '从第2行开始拆分
           strr = .Range("c" & i).Value '拆分C列内容
           If Not d.exists(strr) Then
              d.Add strr, .Range("a" & i).Resize(1, 4)
           Else
              Set d.Item(strr) = Union(d.Item(strr), .Range("a" & i).Resize(1, 4))
           End If
       Next
       k = d.keys
       i = d.items
       For a = 0 To d.Count - 1
          Worksheets.Add.Name = k(a)
           i(a).Copy Worksheets(k(a)).Range("a2")
       Next
    End With
End Sub
 
上述代码用到了字典
 
For i = 2 To rrow '从第2行开始拆分
strr = .Range("c" & i).Value '拆分C列内容
 
根据自己实际需求修改代码即可。
 

【转载】EXCEL VBA 工作簿(表)合并拆分的更多相关文章

  1. VB6实现Excel多工作簿数据合并

    以前的同事,工作需要,让我帮忙完成多个工作簿的汇总. 我就用最熟悉的VB6写了一个Form应用程序,这是因为我不知道她目前的系统和Office情况,如果太高大上了,她不会部署安装.索性就简单粗暴地来个 ...

  2. 【转载】EXCEL VBA 工作表拆分

    用VBA拆分工作表是一个不错的方法,特别是在处理大量数据的时候,能节省不少时间.   1.高级筛选: 筛选并复制到新工作表的关键代码如下: Range("Database").Ad ...

  3. 我们无法找到服务器加载工作簿的数据模型"的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错

    假定您使用 Analysis Services 源在 Microsoft Excel 2013 中创建数据透视表.将 Excel 工作簿上载到 Microsoft SharePoint 网站中.当您尝 ...

  4. excel破解工作簿与工作表保护

    1.工作簿保护 1.1.使用压缩文件打开文件

  5. excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史

    前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有 ...

  6. Excel不同工作簿之间提取信息

    Sub 不同工作簿间提取信息() '用于单个字段信息的提取: Dim w As Workbook, wb1 As Workbook, wb2 As Workbook, wb3 As Workbook ...

  7. Excel统计工作簿sheet个数

    按Alt+F11调出VBE后,在"视图"-“立即窗口”中输入: debug.print ThisWorkbook.Sheets.Count 回车后就可看到工作表数量.

  8. Excel VBA基础教程

    https://www.w3cschool.cn/excelvba/excelvba-basics.html Excel VBA语言基础 VBA语言的基础认识 详解VBA编程是什么 excel处理录制 ...

  9. excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表

    在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...

随机推荐

  1. 220403 考试爆炸记 (T1T2)

    T1 最大约数和 先放一下我考时的代码.(没想到能A过洛谷的数据,可能是洛谷的数据有点弱) #include<bits/stdc++.h> using namespace std; int ...

  2. 【听如子说】-python模块系列-AIS编解码Pyais

    Pyais Module Introduce pyais一个简单实用的ais编解码模块 工作中需要和ais打交道,在摸鱼的过程中发现了一个牛逼的模块,对ais编解码感兴趣的可以拿项目学习一下,或者运用 ...

  3. java实现单链表的创建、增、删、改、查

    文章目录 单链表的创建.增.删.改.查 1.增加一个节点 2.删除一个节点 3.修改某一个节点 5.遍历单链表 单链表的创建.增.删.改.查 双向链表的增删改查:https://blog.csdn.n ...

  4. JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环

    文章目录 1.流程控制语句 1.1 代码 1.2 测试结果 2.弹窗提示输入内容 2.1 代码 2.2 测试结果 3.条件分支语句 3.1 代码 3.2 测试结果 4.while和 do...whil ...

  5. .net core -利用 BsonDocumentProjectionDefinition 和Lookup 进行 join 关联 MongoDB 查询

    前序 前段时间由于项目需要用到MongoDB,但是MongoDB不建议Collection join  查询,网上很多例子查询都是基于linq 进行关联查询.但是在stackoverflow找到一个例 ...

  6. 知识图谱顶会论文(ACL-2022) ACL-SimKGC:基于PLM的简单对比KGC

    12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 摘要 1.引言 2.相关工作 2.1 知识图补全 ...

  7. 基于YOLO和PSPNet的目标检测与语义分割系统(python)

    基于YOLO和PSPNet的目标检测与语义分割系统 源代码地址 概述 这是我的本科毕业设计 它的主要功能是通过YOLOv5进行目标检测,并使用PSPNet进行语义分割. 本项目YOLOv5部分代码基于 ...

  8. 17.ViewSet和Router

    REST框架为我们提高了一个更加抽象的ViewSet视图集,ViewSet提供一套自动的urlconf路由 ViewSet与View类几乎相同,不同之处在于它们提供诸如read或update之类的操作 ...

  9. 浅谈ORM-对象关系映射

    目前.NET(C#)中比较流行的ORM框架: SqlSugar (国内) Dos.ORM (国内) Chloe (国内) StackExchange/Dapper (国外) Entity Framew ...

  10. UEC 利用代理/委托写一个生命组件

    首先基于ActorComponent创建一个组件 HealthComponent,将需要的变量与函数创建 #include "CoreMinimal.h" #include &qu ...