指南
Excel 很卡、计算很慢怎么办?易失函数、整列引用等 6 个原因
更新于 2026-10-13
Excel 卡顿大致分三种,原因不同,处理方法也不同:
| 现象 |
多半是 |
| 打开、保存特别慢,文件很大 |
文件体积:样式堆积、空白区域格式、透视表缓存、大图片 |
| 改一个单元格就转圈,状态栏显示「计算」 |
公式重算:易失函数、整列引用、重复计算 |
| 滚动、选中单元格时卡 |
条件格式堆积、大量图片或形状 |
体积问题见《Excel 文件太大怎么变小》。下面主要讲公式。
1. 易失函数
OFFSET、INDIRECT、TODAY、NOW、RAND、RANDBETWEEN,以及部分用法的 CELL、INFO 是易失函数:工作簿里任何一个单元格改动,它们都会重算,并带着所有依赖它们的公式一起重算。几千个这样的公式,就是每次编辑都转圈。
改法:
- 用
OFFSET 做动态区域的,改成 INDEX,它不是易失函数:
=SUM(OFFSET(A1,0,0,COUNTA(A:A),1)) → =SUM(A1:INDEX(A:A,COUNTA(A:A)))
TODAY() 只在一个单元格里写一次,其他公式引用这个单元格;
INDIRECT 拼表名、拼地址的,能用直接引用、INDEX 或 CHOOSE 代替就代替。
2. 整列引用放进了数组运算
SUMIF(A:A,…) 这类函数 Excel 会自动限制在已使用的区域里,影响不大;但在 SUMPRODUCT 和数组公式里写 A:A,Excel 会实打实地算满一百多万行。
改法: 把范围限定到实际数据,例如 A2:A5000;或者把数据转成表格(Ctrl + T),用结构化引用,表格变长时范围会自动跟着变。
3. 同一段计算做了两遍
=IF(ISERROR(VLOOKUP(…)),"",VLOOKUP(…)) 会把 VLOOKUP 算两遍。
改法: 用 =IFERROR(VLOOKUP(…),""),只算一遍。同一行里有好几列都在查同一个值时,先用一列算出 MATCH 的结果,其他列用 INDEX 直接取,不要每列重新查找一次。
4. VLOOKUP 引用了整张表
=VLOOKUP(A2,Sheet2!A:Z,5,FALSE) 依赖的是整个 A 到 Z 列,这些列里任何一个单元格改动,所有这样的查找都要重算。
改法: 用 INDEX + MATCH 只引用真正用到的两列:=INDEX(Sheet2!E:E,MATCH(A2,Sheet2!A:A,0))。
5. 条件格式和格式堆积
复制粘贴、拖动行之后,条件格式会被拆成成百上千段,滚动和编辑时 Excel 要逐段判断。打开「开始 → 条件格式 → 管理规则」,删掉重复的规则,对整列重设一条。
6. 临时办法:切换到手动计算
在「公式 → 计算选项」里选「手动」,编辑时不再自动重算,改完按 F9 统一计算。
注意:手动模式会保存在文件里,别人打开时看到的可能是没有更新的旧结果。用完记得切回「自动」。
一键处理
- 不知道卡在哪?先用体检:它会区分体积问题、公式问题(易失函数、整列引用、循环引用)和设置问题(手动计算),并告诉你该用哪个工具。
- 公式优化会把能证明等价的公式自动改写成高效写法,比如去掉易失函数、去掉重复计算。每一格改写都要过三道校验,结果必须和原来完全一样;证明不了的保持原样,列在报告里并附手动修改建议。默认只用 Excel 2010 起就有的函数,旧版 Excel 也能打开。