HR 手上有一张 800 行的员工清单,要给 12 个部门负责人各发一份“只看自己部门”的表;销售助理要给 60 个客户各发一份自己的对账单。手工筛选 → 复制 → 新建工作簿 → 粘贴 → 另存,做 12 份还行,做 60 份一定出错——最常见的事故是把 A 客户的对账单发给了 B 客户。

三种做法按数据量选,各有明确的适用边界。

做法一:筛选后另存(10 份以内、每次只做一遍)

  1. 数据 → 筛选,选出一个部门
  2. 选中可见区域复制 → 新建工作簿 → 粘贴为值(避免把公式和外链带过去)
  3. 补上标题行,另存为独立文件

适合临时、少量、结构不重复的场景。

三个坑:

  • 粘贴时把隐藏行一起带上了:粘贴前确认“可见单元格”已选中(Alt+; 可只选可见单元格)
  • 表头有合并单元格时复制会错位,先取消合并或用透视表做法
  • 忘记每个文件重命名,第二天桌面上出现 12 个“_BOOK1.xlsx”

做法二:数据透视表的“显示报表筛选页”(最推荐,可复用)

这是 Excel 里被严重低估的一个功能,它能在几秒内把一个字段的所有取值各生成一个工作表。

  1. 选中总表 → 插入 → 数据透视表
  2. 把要拆分的字段(如“部门”)拖到 “筛选器 / 报表筛选” 区域,其余字段正常放到行、列、值
  3. 光标停在透视表内 → 数据透视表分析(选项)→ 选项 → 下拉 → 显示报表筛选页
  4. 弹窗里确认字段,勾选“新建工作表中的每页”,确定

结果:每个部门一个独立工作表,自动命名,一次生成。

最后一步是把工作表各自另存为文件:可以右键全选工作表标签 → 移动或复制 → 到“新工作簿”,得到 N 个簿,再逐个保存;或者直接发这一个多 Sheet 文件,让每个负责人只看自己的 Sheet,并 锁定不让改。

适用场景:每月都要做的固定拆分(工资、报表、对账单),第二次开始就是几秒钟的事。

做法三:VBA 循环导出(30 份以上必须用它)

逻辑很直白,十几行代码:

  1. 取出拆分字段的所有不重复值
  2. 循环:对总表按值筛选 → 复制可见区域到新工作簿 → SaveAs 成 字段值.xlsx → 关闭新簿

在 开发者 → Visual Basic 里新建模块运行(没有“开发者”选项卡的,先在 文件 → 选项 → 自定义功能区 里勾选)。

运行前的三条纪律:

  • 复制一份工作簿再试,宏直接在原文件上跑,写错路径可能覆盖数据
  • 先只跑前 3 个值验证文件内容对不对,别第一次就全量导出 60 份然后逐个打开检查
  • 文件命名要含唯一标识(客户编号而非客户名),客户名里有 /、:、空格会导致保存失败

拆完之后:发给别人之前的三件事

一、只保留数据,去掉公式和外链

分发的文件里如果有跨表公式,对方打开会报引用错误。粘贴为值、或另存时去掉链接(数据 → 编辑链接 → 断开链接)。

二、含个人信息或金额的,转成只读格式

三、发之前抽样核对,而不是发之后

至少随机抽 3 份打开,确认“筛选值和文件内容一致”。拆分类工作真正的风险不是慢,是错配——把甲的数据给了乙,慢反而让人有时间发现错误。

反方向需求:合并多个回收的文件

拆头发出去,收回来又是 60 个文件。汇总时不要一个个复制粘贴:用 Power Query(数据 → 获取数据 → 来自文件 → 从文件夹)把整个文件夹的同类工作表一次并起来,新增文件后刷新即可。

需要把 60 份 PDF 合成一份提交件,用 合并 PDF;反过来从一份大 PDF 里按页拿出某几家,用 拆分 或 提取页面。

同类需求:不需要拆文件,只需要拆着看

很多“拆分”其实只是想要分别查看,那用透视表或分组即可,不必真的生成 60 个文件。文件数量增加会让后续统计、备份、清理的成本一起上升,命名与整理规则见 文件怎么命名才方便查找。

批量生成的是内容各异的文档(通知书、聘用函)而不是表格,正确工具是 Word 邮件合并,见 Word 邮件合并批量生成通知。

要如实说明边界:站内的 Excel 按 Sheet 拆分 是把一个工作簿的每个 Sheet 各存成一个文件,不是按某一列的取值拆分;按字段值拆成 N 份仍要靠上文的透视表或宏。多份回收表合成一份工作簿用 Excel 合并,系统导出的流水用 CSV 转 Excel 打开才不乱码。拆分这一档不做 OCR,扫描件里的文字提不出来;要取字走 图片转文字(每页扣 1 点),要取表走 表格识别转Excel(每页扣 2 点)。身份证、银行卡、手机号这类字段要发出去,可用 敏感信息脱敏 先处理。游客与未充值注册用户单文件上限 8MB,充值会员按档位可到 20/30/50MB,文件保留 24 小时,成品请当天下载。