销售数据要按“省份”拆给各大区经理,员工信息要按“部门”分发给HR……
手动复制粘贴?眼花缭乱,耗时费力,还容易出错!
别再做重复劳动的“表弟”“表妹”了!今天教你一招批量按列拆分的终极秘籍,让你一分钟内告别繁琐,效率直接拉满!
✨ 核心功能:指定一列,自动分身
无论你的数据是“城市”、“产品类别”还是“月份”,只需指定作为条件的列,工具就能自动将每个唯一项的数据筛选出来,并生成一个独立的Excel工作簿文件,并以该条件命名,清晰又规范。
📌 超简单四步操作:
准备数据:打开你的总数据表格。
复制VBA代码
指定关键列:选择需要按哪一列进行拆分(如“部门”列)。
设置输出:选择拆分后文件保存的位置。
一键执行:点击运行,静待奇迹发生!
💡 应用场景广泛:
人事行政:按部门拆分工资条、员工名单。
财务:按项目或月份拆分费用报表。
教学管理:按班级拆分学生成绩单。
销售分析:按地区或产品线拆分销售数据。
从此,海量数据拆分工作从“体力活”变成“自动化”,让你有更多时间专注于核心数据分析!
高效办公,从解放双手开始。赶紧试试吧!
Sub SplitDataByColumn()Dim ws As WorksheetDim rng As RangeDim dict As ObjectDim key As VariantDim colIndex As IntegerDim lastRow As Long, lastCol As LongDim headerRow As RangeDim newWb As WorkbookDim filterValue As StringDim savePath As String' 注意:这里需要根据你的实际工作表名称调整,小编的工作表名称是订单Set ws = sheets("订单")' 获取用户选择的列On Error Resume NextcolIndex = Application.InputBox("请输入要拆分的列号(数字):", "选择列", Type:=1)On Error GoTo 0If colIndex = 0 Then Exit Sub ' 用户取消' 获取数据范围lastRow = ws.Cells(ws.Rows.Count, colIndex).End(xlUp).RowlastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).ColumnSet rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))Set headerRow = rng.Rows(1)' 创建字典用于存储唯一值Set dict = CreateObject("Scripting.Dictionary")' 收集唯一值(从第2行开始,跳过标题)For i = 2 To lastRowfilterValue = ws.Cells(i, colIndex).ValueIf Not dict.exists(filterValue) Thendict.Add filterValue, 1End IfNext i' 设置保存路径savePath = Application.GetSaveAsFilename(InitialFileName:="拆分数据", _FileFilter:="Excel Files (*.xlsx), *.xlsx", _Title:="选择保存位置和文件名")If savePath = "False" Then Exit Sub ' 用户取消' 提取路径部分(不包括文件名)savePath = Left(savePath, InStrRev(savePath, "\"))' 关闭屏幕更新以提高性能Application.ScreenUpdating = False' 遍历字典中的每个键(唯一值)For Each key In dict.keys' 筛选数据rng.AutoFilter Field:=colIndex, Criteria1:=key' 创建新工作簿Set newWb = Workbooks.Add' 复制标题行headerRow.SpecialCells(xlCellTypeVisible).Copy newWb.Sheets(1).Range("A1")' 复制可见数据(不包括标题)ws.Range("A2:A" & lastRow).Resize(, lastCol).SpecialCells(xlCellTypeVisible).Copy _newWb.Sheets(1).Range("A2")' 移除筛选ws.AutoFilterMode = False' 清理文件名中的非法字符Dim safeFileName As StringsafeFileName = CleanFileName(key)' 保存工作簿On Error Resume Next ' 防止文件名错误导致崩溃newWb.SaveAs savePath & safeFileName & ".xlsx"On Error GoTo 0' 关闭工作簿newWb.Close FalseNext key' 恢复屏幕更新Application.ScreenUpdating = TrueMsgBox "数据拆分完成!共创建 " & dict.Count & " 个工作簿。", vbInformationEnd SubFunction CleanFileName(ByVal fileName As String) As String' 替换文件名中的非法字符Dim illegalChars As StringillegalChars = "\/:*?""<>|"Dim i As IntegerFor i = 1 To Len(illegalChars)fileName = Replace(fileName, Mid(illegalChars, i, 1), "_")Next i' 限制文件名长度(Windows限制为255字符,这里设为50)If Len(fileName) > 50 ThenfileName = Left(fileName, 50)End IfCleanFileName = fileNameEnd Function
-
免费课程:Power BI免费课程
-
免费课程绝大部分都是录制视频讲解,针对典型案例进行讲解,大家可以当做是一个字典,需要时候来找一找。免费课程不系统,有些基础内容小编默认你是知道,所以没有详细讲解,需要系统学习推荐看看小编的付费系统课程。
-
付费课程:Power BI会员课程更新 -
付费课程从零基础开始讲解,上手平滑,深入浅出,结合实际案例针对性强。具体可以参考介绍,课程内容持续更新,永久学习!(付费后,小编后面开发推出的所有课程和资源免费获取,无需再付费!) -
注意:提升自己,普惠他人,不靠卖课为生,确实有需要可以添加我,没需要,不必打扰,关注公众号即可。 -

