Excel汇总表拆分
- 2026-11-05 17:03:18
Excel汇总表拆分场景:将汇总工作表根据某列数据拆分为独立的工作表,将工作表拆分为独立的工作簿。 操作过程中记得对原始工作簿进行备份!!! 例子:如图,将汇总表中各个城市的GDP等数据根据省份拆分成独立的工作簿。 
视屏教程: 一、汇总表拆分为子表 数据透视化:首先复制省份这一列(B、C两列),重命名为省份筛选吧(避免数据透视重名)-全选数据-插入数据透视表-对透视表字段、布局进行设置-不显示分类汇总、仅为列启用(如果尾行不需要总计数则设置为行和列禁用)、以表格形式显示、重复所有标签、例子中筛选2024年数据进行展示 
透视表拆分:数据透视表分析-选项-显示报表筛选器页-确定(分页显示) 
得到每个省份城市的子表 
透视表转换:得到每个省份子表后光标暂放在第一个表-鼠标左键单击左三角到最后一个子表-按住shift+单击最后一个子表,即可全选所有子表,鼠标左键单击表格左上角三角全选表格-Ctrl+C复制透视表-右键单击-选择粘贴为数值(将透视表转换为普通表) 
表格布局调整:继续全选所有子表,根据需求调整表格格式,可以增加表格标题、调整布局、字体格式等,如果要调整行尾需要取消组合对单一表格进行调整(每个子表的行尾不一致) 
二、工作表拆分为工作簿 目前excel还没有直接拆分工作表为工作簿的功能(WPS有啊),需要通过vba宏来完成。 执行代码后会提示子表保存名称(默认:原工作簿名-子表名)-选择文件保存位置(默认:原工作簿路径),执行过程中状态栏会显示进度,效果下图所示 




Over!

已关注
关注
重播 分享 赞





Sub 拆分当前工作簿()Dim wb As WorkbookDim sht As WorksheetDim prefix As StringDim saveFolder As StringDim newWb As WorkbookDim i As Integer, fileCount As IntegerDim answer As IntegerDim userInput As String' 获取当前活动工作簿Set wb = ActiveWorkbookIf wb Is Nothing Then MsgBox "未检测到打开的工作簿!": Exit Sub' 必须已保存If wb.Path = "" ThenMsgBox "请先保存当前工作簿,再运行拆分!", vbExclamationExit SubEnd If' 默认前缀 = 工作簿名称(去掉扩展名)prefix = Left(wb.Name, InStrRev(wb.Name, ".") - 1)userInput = InputBox("请输入文件名前缀(前缀-工作表名.xlsx)", "设置前缀", prefix)If StrPtr(userInput) = 0 Then Exit SubIf userInput <> "" Then prefix = userInput' 默认保存路径 = 工作簿所在文件夹saveFolder = wb.Path & Application.PathSeparator' 询问是否更改保存位置answer = MsgBox("文件将保存到:" & vbCrLf & saveFolder & vbCrLf & _"是否更改保存位置?", vbYesNo + vbQuestion, "保存位置")If answer = vbYes ThenuserInput = Application.InputBox("请输入新的保存文件夹完整路径:" & vbCrLf & _"(例如:C:\我的文件夹\ 或 /Users/用户名/Desktop/)", _"更改保存位置", saveFolder)If StrPtr(userInput) = 0 Then Exit SubIf userInput <> "" ThensaveFolder = userInputIf Right(saveFolder, 1) <> Application.PathSeparator ThensaveFolder = saveFolder & Application.PathSeparatorEnd IfEnd IfEnd If' 确保文件夹存在If Dir(saveFolder, vbDirectory) = "" ThenOn Error Resume NextMkDir saveFolderIf Err.Number <> 0 ThenMsgBox "无法创建文件夹:" & saveFolder & vbCrLf & "请检查路径是否正确。", vbExclamationExit SubEnd IfOn Error GoTo 0End If' 开始拆分Application.ScreenUpdating = FalseApplication.DisplayAlerts = Falsei = 0For Each sht In wb.Sheets' 跳过隐藏工作表(可选:如需包含隐藏表,删除下面两行)If sht.Visible <> xlSheetVisible Then GoTo NextSheeti = i + 1Application.StatusBar = "拆分中 (" & i & "/" & wb.Sheets.Count & ") " & sht.Namesht.CopySet newWb = ActiveWorkbook' 清理工作表名中的非法字符Dim cleanName As StringcleanName = sht.NamecleanName = Replace(cleanName, "/", "、")cleanName = Replace(cleanName, "\", "、")cleanName = Replace(cleanName, ":", ":")cleanName = Replace(cleanName, "*", "×")cleanName = Replace(cleanName, "?", "?")cleanName = Replace(cleanName, Chr(34), "''")cleanName = Replace(cleanName, "<", "〈")cleanName = Replace(cleanName, ">", "〉")cleanName = Replace(cleanName, "|", "|")cleanName = Replace(cleanName, vbCr, "")cleanName = Replace(cleanName, vbLf, "")' 处理重名文件:若文件已存在则添加序号Dim fullPath As StringDim version As Integerversion = 1fullPath = saveFolder & prefix & "-" & cleanName & ".xlsx"Do While Dir(fullPath) <> ""fullPath = saveFolder & prefix & "-" & cleanName & "(" & version & ")" & ".xlsx"version = version + 1Loop' 保存文件newWb.SaveAs fullPath, 51newWb.Close FalseSet newWb = NothingNextSheet:Next shtApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueApplication.StatusBar = False' 完成提示answer = MsgBox("拆分完成!" & vbCrLf & "共生成 " & i & " 个文件" & vbCrLf & _"保存位置:" & saveFolder & vbCrLf & vbCrLf & _"是否打开该文件夹?", vbYesNo + vbInformation, "完成")If answer = vbYes ThenOn Error Resume Next#If Mac ThenShell "open " & saveFolder#ElseShell "explorer.exe " & saveFolder#End IfOn Error GoTo 0End IfEnd Sub





本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。