【Excel宏自动化】按列拆分导出CSV,这个一键宏帮你省下80%的时间!

大家好,我是你们的老朋友Menphis。
上周市场部的小王找我哭诉:手里有一份全公司5000多人的客户数据,需要按“负责销售”这一列拆分成几十个CSV文件,分别发给对应的销售。手动筛选、复制、新建文件、粘贴、保存……重复几十次,一上午就没了,还差点把某个销售的数据漏掉。
我听完笑了:“这活我两年前就自动化了。”然后甩给他这个一键宏,1分钟搞定。今天就把这个按列拆分导出CSV的利器分享给你,从此告别机械重复的筛选保存。
📌 如何操作excel实现
-
创建宏
-
复制粘贴魔法代码
-
执行宏
-
打开文件夹查看导出文件
1. 创建宏

2. 复制粘贴魔法代码,并保存
Sub 按列拆分导出CSV()Application.ScreenUpdating = FalseDim ws As Worksheet, dict As ObjectDim lastRow As Long, i As Long, savePath As StringDim key As Variant, cellValue As StringSet ws = ActiveSheetSet dict = CreateObject("Scripting.Dictionary") ' 用于存储唯一分类值savePath = ThisWorkbook.Path & "\" ' CSV保存路径(同Excel文件目录)' 获取需要拆分的列(此处为B列,可修改为其他列,如"C")Const splitColumn As String = "B"lastRow = ws.Cells(ws.Rows.Count, splitColumn).End(xlUp).Row' 收集所有唯一分类值(假设第一行是表头,从第2行开始)For i = 2 To lastRowcellValue = Trim(ws.Cells(i, splitColumn).Value)If cellValue <> "" Thendict(cellValue) = "" ' 存入字典去重End IfNext i' 按每个分类值导出CSVFor Each key In dict.Keys' 筛选当前分类的数据ws.Range("A1:" & ws.Cells(lastRow, ws.Columns.Count).End(xlToLeft).Address).AutoFilter Field:=ws.Columns(splitColumn).Column, Criteria1:=key' 复制筛选后的数据(包括标题)ws.UsedRange.SpecialCells(xlCellTypeVisible).Copy' 创建新工作簿并粘贴数据With Workbooks.Add.Sheets(1).Range("A1").PasteSpecial xlPasteValues ' 仅粘贴值,避免格式问题' 保存为CSV文件.SaveAs Filename:=savePath & key & ".csv", FileFormat:=xlCSV, Local:=True.Close SaveChanges:=False ' 关闭新工作簿End WithNext key' 取消筛选ws.AutoFilterMode = FalseMsgBox "✅ 导出完成!共生成 " & dict.Count & " 个CSV文件,保存路径:" & savePath, vbInformation, "提示"Application.ScreenUpdating = TrueEnd Sub

3. 执行宏



💬 结语
说实话,写这个宏的初衷,纯粹是想让自己少加点班。没想到分享出去之后,收到了好多留言说“太好用了”“求多分享一些这种实用小工具”。
其实职场里的很多烦恼,往往就差一个“偷懒”的思路。与其埋头苦干,不如花2分钟研究一下怎么让Excel帮你干活。这个宏我已经用了两年,每次运行都觉得自己赚到了时间。
如果你试了之后有什么问题,或者想让我帮你定制其他功能,直接在评论区留言。我不保证秒回,但保证每个都会看。
如果觉得有用,欢迎点赞、在看、分享给身边常用跟Excel打交道的朋友~
夜雨聆风