ARTICLE · 1147954
数据整理必会的 6 个 Excel 技巧:第 1 招不设,你的编号已经错了
先说一个场景,你对得上号的那种。
师兄发来一份「实验记录汇总.xlsx」,让你把三个课题组的数据并到一起,算个分组均值。
你打开一看:样本编号列里的 S-001 变成了 S-1;基因名列里 SEPT2 变成了「2-Sep」、MARCH1 变成了「1-Mar」;一整列 18 位的测序编号,最后三位全是 0。
你没改过任何东西。是 Excel 在你打开文件的时候,替你“改”了数据。
这不是段子。2016 年 8 月,Mark Ziemann 等三位作者在 Genome Biology 上发表了一篇评论文章,专门统计这件事:他们下载了 18 本期刊 2005—2015 年间发表的论文补充材料,扫描了 35175 个 Excel 文件,结果在 987 个文件、704 篇论文里确认存在基因名被自动转换的错误,占“附带 Excel 基因列表的论文”的 19.6%。顺手扫 NCBI GEO 上提交的 4321 个 Excel 文件,574 个含基因列表,其中 228 个(39.7%)有错。
论文里有一句话很扎心:这个 bug 2004 年就被报道过,十二年后依然在教材级的期刊上反复出现。 而且微软至今没有提供一个“永久关闭自动转日期”的开关。
所以本文的第 1 招,是所有技巧里最救命的——它不教你怎么算,它教你怎么别让 Excel 动你的数据。
下面 6 个技巧按拿到数据之后的时间顺序排:导入 1 个(防篡改)、搭结构 1 个、清洗 2 个、汇总 1 个、复用 1 个。
先上速查表,可以直接照着勾。
Ctrl+T | |||
Ctrl+E;数据 → 分列 | |||
=XLOOKUP( | |||
一、导入:先钉死「别让 Excel 猜」
1. 导入时就把列格式设成文本
Excel 处理科研数据最大的问题不是功能不够,是它太“聪明”——默认帮你猜格式。
四类一定会发生的翻车,记住它们的长相:
- 像日期的变日期:基因名
SEPT2 →2-Sep,MARCH1 →1-Mar(这俩是最经典的受害者,还有DEC1、OCT4、FEB 系列) - 像科学计数法的变浮点:RIKEN 编号
2310009E13 →2.31E+13 - 超过 15 位的被截:微软官方规格里“数字精度”一栏写死就是 15 位。第 15 位之后一律变 0,而且是静默变 0,文件存了就找不回来
- 前导零消失:
001 →1,于是跟另一张表里的001 再也匹配不上
正确的做法是三选一,按场景挑:
① 导入 CSV,不要双击打开。 走 数据 → 从文本/CSV(或 数据 → 获取数据 → 从文件 → 从文本/CSV)→ 选文件 → 预览窗口里先把该设成文本的那一列点成 “文本” 再加载。
这两个动作的区别,值得单独说一句:双击 CSV = 让 Excel 猜;走导入 = 你告诉 Excel 是什么。
② 数据已经在表里了 → 用分列向导“洗”回来。 选中整列 → 数据 → 分列 → 分隔符号(下一步)→ 下一步 → 第三步“列数据格式”选 文本 → 完成。
③ 还没粘 → 先设格式再粘。 整列 → 开始 → 数字格式下拉 → 文本 → 再粘贴。
然后是最关键的一条,请读两遍:
改单元格格式,救不回已经错的数据。
你把那个已经变成「2-Sep」的单元格改成“文本”格式,看到的会是一个五位数(日期序列值)——原值早没了。所以这招的核心是预防:在数据进来之前指定格式。只有“看起来像日期但其实没被转成日期序列值”的情况,分列才救得回来。
补充两条实测结论(都来自前面那篇论文和后续讨论):Google Sheets 不会做这个转换;但你用 Excel 打开那个 Google Sheet,照样会转。所以最稳的交付姿势是:原始数据存 CSV UTF-8,并且走导入、不双击。WPS 同样会转。
二、搭结构:Ctrl+T
2. 超级表:让公式、图表、透视表自己跟着数据长
普通区域是死的,超级表是活的。
你在 A1:F800 上写了 20 个公式、插了图、建了透视表。第 801 行加进来之后:公式不会自动往下填、图表范围不变、透视表还是那 800 行。你要手动改三处,而且很容易漏一处。
做法:光标放进数据区任一格 → Ctrl+T → 勾上“表包含标题” → 确定。
变成超级表之后,你免费得到这些:
- 自动扩展:在表格末尾下一行敲任何东西,这一行自动并入表,公式、条件格式、数据验证全部自动延续下去
- 结构化引用:写
=SUM(表1[浓度]) 而不是=SUM(F2:F801)。你在中间插一列,公式不会错位,因为它认的是列名,不是坐标 - 切片器:插入 → 切片器,点一下就筛,拿给导师看的时候他自己会玩
- 汇总行:表设计 → 勾“汇总行”(快捷键
Ctrl+Shift+T),最后一格的下拉里能直接选求和 / 平均值 / 计数 - 透视表数据源写表名,刷新之后新数据自动进来,再也不用手动改数据源
两个必须注意的点:
一是 别用 Ctrl+Shift+L 冒充它。Ctrl+Shift+L 只是加了个筛选箭头,它不是超级表,加行时公式照样不会自己往下填。
二是 表格里不能有空行、空列,列标题不能重名。超级表碰到整行空白就断在那儿了;同一列里 样本编号 和 样本编号 (尾部多一个空格)也被算成两个不同的东西——这类尾部空格是跨表匹配失败的头号元凶,用 TRIM() 清一遍。
三、清洗:拆开它、补全它
3. Ctrl+E 快速填充 + 分列:把「12.3 mg/L」拆成两列
仪器导出的表经常长这样:浓度这一列的值是 12.3 mg/L。数字和单位黏在一起,整列是文本,SUM 出来是 0。
两条路,看你要不要可复算:
分列(一次性、结果稳定):选中该列 → 数据 → 分列 → 分隔符号 → 勾“空格”(或勾“其他”填 /)→ 下一步 → 列数据格式选“常规” → 完成。数字部分自动变成真数值。
快速填充 Ctrl+E(更快、但要检查):在旁边空列手敲一个你期望的结果,再敲第二个,然后按 Ctrl+E。Excel 会识别出你的模式,把整列填满。
它能干的事比你想的多:拆字符串、合并两列(编号 + 姓名)、从一串里抽出数字或字母、统一格式(批量补前导零、加后缀 mg/L)。
但 Ctrl+E 有两条硬边界,必须知道:
- 它是一次性猜测,不是公式。 源数据改了它不会重算,也不跟着筛选变。要能重算就用函数:Microsoft 365 有
TEXTBEFORE /TEXTAFTER /TEXTSPLIT /REGEXEXTRACT,旧版用LEFT /RIGHT /MID 配FIND - 它可能猜错,而且错得很隐蔽。 填完必须翻到底检查一遍——尤其是列里格式不统一的时候(有的行是
12.3 mg/L,有的是12.3mg/L,有的还带了个空格)。给 2—3 个样例再按Ctrl+E,准确率会高很多
顺带说一条数据整理的规矩,它比技巧本身更重要:
一列只放一个变量,单位写进表头,不要写进单元格。
表头写 浓度 (mg/L),单元格里只写 12.3。这是 tidy data 的基本要求,也是后面透视表能不能拖、图能不能直接画、R 和 Python 能不能直接读的前提。同理,“未检出”请留空单元格,不要写文字——一个文字就能让整列在透视表里变成“计数”,后面第 5 招会讲。
4. XLOOKUP 换掉 VLOOKUP,配上 4 个动态数组函数
VLOOKUP 有三个坑,任何一个都够你换掉它:
- 只能从左往右查。返回值在查找列左边就抓瞎,得靠
INDEX +MATCH 绕 - 第 3 参数是“列序号”。你在查找区里插一列,所有公式静默错位,而且不报错
- 第 4 参数省略 = 近似匹配。这是最阴的一个:如果查找列没有按升序排好,VLOOKUP 返回的是错误结果,并且不会给你任何提示。 多少人的数据错在这儿,自己都不知道
换成 XLOOKUP,语法是:
=XLOOKUP(查找值, 查找列, 返回列, [找不到时返回什么], [匹配模式], [搜索模式])
好处是:默认精确匹配、返回列可以在查找列左边、第 4 参数可以写 "未匹配"(从此再也不会看到满屏 #N/A)。
四个配套的现代函数(Microsoft 365 / Excel 2024;Excel 2021 有一部分;Excel 2019 及更早一个都没有):
UNIQUE | ||
FILTER | ||
SORT / SORTBY | ||
GROUPBY / PIVOTBY |
再往上,Microsoft 365 近两年还陆续加了 TRIMRANGE(把溢出范围里多余的空行空列裁掉)和 REGEXTEST / REGEXEXTRACT / REGEXREPLACE(正则三件套,处理编号、样本码非常好用)。
怎么确认你有没有:在任意单元格敲 =GROUPBY(,看 Excel 给不给自动补全。会补全就是有,不补全就是没有,比查版本号快。
匹配之前,还有一步必做:先查重复。XLOOKUP 和 VLOOKUP 遇到重复的查找键,只返回第一个,且不提醒你。动手前先数一数:=COUNTA(UNIQUE(表1[样本编号])) 和 =COUNTA(表1[样本编号]) 两个数是不是一样。不一样就先处理重复(数据 → 删除重复值,或 开始 → 条件格式 → 突出显示单元格规则 → 重复值,先看一眼再删)。
四、汇总:透视表 30 秒出分组均值
5. 数据透视表 + 切片器
场景:3 个处理组 × 4 个时间点 × 3 次重复,要算每组的均值和标准差。
用 AVERAGEIFS 写 12 个公式,不如透视表 30 秒。
做法:光标放进超级表里 → 插入 → 数据透视表 → 确定 → 右侧字段列表里拖:分组拖到“行”,时间点拖到“列”,指标拖到“值”。
四个几乎人人都会踩的坑:
① 数据源要用超级表名,不要用 A1:F800。 用区域的话,加了行透视表不会跟着扩,你得手动改数据源(分析 → 更改数据源)。用超级表名,刷新之后新数据自动进来。
② 改了源数据不会自动更新。 要刷新:右键 → 刷新;或者 Ctrl+Alt+F5 刷新全部。打印前、截图前、导出前,都刷一次。
③ 默认可能是“计数”而不是“求和”。 只要那一列里混进了一个文本单元格(比如某格写了“未检出”),Excel 会把整列当文本处理,值字段默认给你“计数”。所以第 3 招那句“留空、别写文字”在这里就兑现了。
④ 标准差要去下拉列表最底下翻。 双击值字段 → 值字段设置 → “值汇总方式”里除了求和 / 计数 / 平均值,还有 StdDev(样本标准差)和 StdDevp(总体标准差)。做实验数据一般要的是 StdDev。
顺手把切片器加上:分析 → 插入切片器。给导师看的时候他能自己点着筛,比你在旁边帮他改筛选条件强。
透视表做不了的事:比如“均值 ± 标准差”要显示在同一格里,透视表只能分行出。这时候用 GROUPBY 出两列再拼,或者接受分行显示——别为了排版去手打数字,一旦手打,它就再也不会跟着源数据变了。
五、复用:把「每月重做一遍」变成「点一下刷新」
6. Power Query:把清洗步骤录下来
场景:每月从仪器导出 12 个 CSV;每学期收 8 个班的实验报告表。每次复制粘贴半小时,而且每次手工操作都可能漏一步——漏的那一步,三个月后才被发现。
Power Query 的价值就一句话:把清洗步骤录下来,下次换数据一键重跑。
做法(以“合并一个文件夹里的所有 CSV”为例):
- 数据 → 获取数据 → 从文件 → 从文件夹
- 选文件夹 → 确定 → 在预览窗口点 “组合”(下拉里可选“合并并转换数据” / “合并并加载”)
- 选一个样例文件(默认第一个)→ 确定 → Power Query 编辑器打开
- 在编辑器里做清洗:删除不需要的列(主页 → 删除列)、点列头的类型图标指定列类型、筛选、拆分列、填充向下——右侧“应用的步骤”会一条条记下来,可以点回去改、可以删掉某一步
- 主页 → 关闭并上载
以后怎么用:把新 CSV 丢进那个文件夹 → 打开总表 → 右键刷新(或 数据 → 全部刷新)。新文件自动进来,所有清洗步骤自动重跑一遍。
三条纪律:
- 文件夹里只放要合并的文件。 多一个无关文件,就会被一起合进去
- 所有文件的列名要一致。 顺序无所谓——Power Query 是按列名匹配的,这点比手工粘贴宽容得多
- 样例文件选最有代表性的那个。 列类型是按样例文件推断的,样例选偏了,后面所有文件的类型都会错
它的边界也要说清楚:Power Query 适合“结构固定、会重复来活”的场景,一次性小活儿不值得开。另外它不会动你的原始数据——所有步骤只在上载时输出一张新表,原始 CSV 原地不动。这一点比直接在原表上手改安全得多,也是我推荐用它替代手工清洗的真正原因。
还有一条很实用:如果你只是想“导入 CSV 但不想被改格式”,Power Query 同样是正解。 导入时手动把那几列的类型点成“文本”(ABC 图标),日期是日期、编号是编号,谁也不许动谁。
交数据前的 5 分钟:四件事
第一件:看绿色三角。 单元格左上角那个绿色小三角,意思是“数字以文本形式存储”。如果看不到,先去 文件 → 选项 → 公式 → 启用后台错误检查 把它打开。选中整列 → 点旁边的黄色感叹号 → “转换为数字”。
注意:不要选“忽略错误”。 那只是把提示关掉,问题还在,而且下次你再也看不见它了。
第二件:Ctrl+ 反引号键(Tab 上方那个),显示公式本身。 扫一遍:有没有 #N/A、#VALUE!、#REF!;有没有哪一行的公式没拖到底;有没有哪个公式的引用范围跟别人不一样。这一步能抓出大部分“结果看着不太对但说不上哪儿不对”。
第三件:F5 → 定位条件 → 空值。 一次性把所有漏填的格子选出来,标个黄底。
空值的危害在于它的两面性:AVERAGE 会忽略空单元格,但不会忽略写了 0 的单元格。同样是“这一组均值偏低”,一个是因为漏测(应该排除),一个是因为真的测到 0(应该计入)——结果完全一样,含义天差地别。 所以宁可留空,不要顺手填 0。
第四件:原始数据另存一份只读的 CSV。 加工前的那份,永远别改。所有操作都在副本上做。
顺手记 8 个键
Ctrl+T | |
Ctrl+E | |
Ctrl+Shift+L | |
Ctrl+; | 插入当前日期(记录实验日期很好用;Ctrl+Shift+; 是当前时间) |
Alt+; | 只选定可见单元格——复制筛选后的结果必用,否则会把被筛掉的行一起粘出来 |
F5 → 定位条件 | |
Ctrl+ 反引号键 | |
Ctrl+Alt+F5 |
三条避坑提醒
1. 别双击 CSV。这是本文最重要的一句话。
双击打开 = 让 Excel 猜类型;走“数据 → 从文本/CSV”导入 = 你告诉 Excel 类型。基因名、样本编号、18 位测序 ID、带前导零的编号,全栽在这个动作上。养成习惯只需要三天,救回来的可能是一整章数据。
2. 版本差异比你想的大,动手前先确认自己有什么。
XLOOKUP /FILTER /SORT /UNIQUE:Microsoft 365、Excel 2021、Excel 2024 有,Excel 2019 及更早一个都没有GROUPBY /PIVOTBY /TRIMRANGE /REGEX* 这几个更晚,官方文档列的是 Microsoft 365 与 Excel 2024,旧版大概率没有- 顺带提醒一个时效问题:Excel 2019 的扩展支持已经在 2025 年 10 月结束,Excel 2021 的支持周期也快到了,Excel 2024 到 2029 年 10 月。还在用 2019 的,升级这件事真的该排上日程了
- 确认方法:文件 → 账户 → 关于 Excel 看版本号和更新通道;或者直接敲
=XLOOKUP( 看有没有自动补全。企业版如果被 IT 锁在半年通道,新函数会晚几个月才到 - WPS 不一样:动态数组、Power Query 的支持程度都和 Excel 有出入,别照搬本文的菜单路径
3. Excel 是加工车间,不是仓库。
官方规格是一张表最多 1,048,576 行 × 16,384 列,看着够用,但真上到几十万行,透视表和查找函数会明显变卡。更根本的问题是 Excel 没有数据类型约束——谁都能在数字列里敲一个“待补”、在日期列里敲一个“/”。
所以:原始数据留一份只读的 CSV,Excel 只用来加工,加工过程记在 Power Query 里。 哪天导师问“这个数是怎么来的”,你能一步步指给他看,而不是只能说“我记得是这样算的”。