一、合并工作簿
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列内容
根据自己实际需求修改代码即可。
- VB6实现Excel多工作簿数据合并
以前的同事,工作需要,让我帮忙完成多个工作簿的汇总. 我就用最熟悉的VB6写了一个Form应用程序,这是因为我不知道她目前的系统和Office情况,如果太高大上了,她不会部署安装.索性就简单粗暴地来个 ...
- 【转载】EXCEL VBA 工作表拆分
用VBA拆分工作表是一个不错的方法,特别是在处理大量数据的时候,能节省不少时间. 1.高级筛选: 筛选并复制到新工作表的关键代码如下: Range("Database").Ad ...
- 我们无法找到服务器加载工作簿的数据模型"的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错
假定您使用 Analysis Services 源在 Microsoft Excel 2013 中创建数据透视表.将 Excel 工作簿上载到 Microsoft SharePoint 网站中.当您尝 ...
- excel破解工作簿与工作表保护
1.工作簿保护 1.1.使用压缩文件打开文件
- excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史
前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有 ...
- Excel不同工作簿之间提取信息
Sub 不同工作簿间提取信息() '用于单个字段信息的提取: Dim w As Workbook, wb1 As Workbook, wb2 As Workbook, wb3 As Workbook ...
- Excel统计工作簿sheet个数
按Alt+F11调出VBE后,在"视图"-“立即窗口”中输入: debug.print ThisWorkbook.Sheets.Count 回车后就可看到工作表数量.
- Excel VBA基础教程
https://www.w3cschool.cn/excelvba/excelvba-basics.html Excel VBA语言基础 VBA语言的基础认识 详解VBA编程是什么 excel处理录制 ...
- excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...
随机推荐
- P3261 [JLOI2015]城池攻占 (左偏树+标记下传)
左偏树还是满足堆的性质,节点距离就是离最近的外节点(无左或者右儿子 或者二者都没有)的距离,左偏性质就是一个节点左儿子的距离不小于右儿子,由此得:节点距离等于右儿子的距离+1. 本题就是对于每个节点 ...
- P1600 [NOIP2016 提高组] 天天爱跑步 (树上差分)
对于一条路径,s-t,位于该路径上的观察员能观察到运动员当且仅当以下两种情况成立:(d[ ]表示节点深度) 1.观察员x在s-lca(s,t)上时,满足d[s]=d[x]+w[x]就能观察到,所以我们 ...
- MySQL 窗口函数
1. 窗口函数概念和语法 窗口函数对一组查询行执行类似聚合的操作.然而,聚合操作将查询行分组到单个结果行,而窗口函数为每个查询行产生一个结果: 函数求值发生的行称为当前行 与发生函数求值的当前行相关的 ...
- git中 gitignore 忽略文件操作
通常,.gitignore文件被放置在存储库的根目录中.根目录也称为父目录和当前工作目录.根文件夹包含组成项目的所有文件和其他文件夹.也就是说,您可以将它放在存储库中的任何文件夹中.你甚至可以有多个. ...
- 创建Vue工程常用的命令
创建一个vue项目的步骤 1.创建一个名称为myapp的工程 vue init webpack myapp 2.进入工程目录 cd myapp 3.安装 vue-router npm install ...
- Blog1:nchu-software-oop-2022-1~3
(1) 前言 针对在完成三次作业过程中产生的问题进行总结与分析. 三次作业一共十五(9+3+3)道题目,其中前两次难度较为简单,第三次复杂程度飞跃式上涨. 其中,涉及到java语言中基本的输入输出语句 ...
- nrf9160开机测试(做主控)——连接nrfcloud云
由于作者水平有限,如有披漏欢迎指正. 测试流程: 1.前期开发准备(硬件) 2.开发环境准备(软件) 3.连接云 4.GPS测试 一.前期开发准备: nrf9160-DK版 nRF Connect f ...
- Sublime Text4(Build 4126) 安装备忘
Sublime Text4(Build 4126) 安装备忘 sublime text 4126 PJ已测可用 打开浏览器进入网站https://hexed.it 打开sublime text4安装目 ...
- [VUE]报错: No Babel config file detected for
在使用vue脚手架创建的项目中,项目中每个文件的第一行都会有红色波浪线. 解决方法:在项目文件中找到package.json文件,在parserOptions里添加"requireConfi ...
- ES6 学习笔记(十二)代理器Proxy的简单使用
1.前言 以前在学习react时做了个仿手机端的QQ音乐项目.当时的数据是通过proxy代理的QQ音乐数据接口,直接写在package.json里面.Proxy 对象(Proxy)是 ES6的特性,只 ...