上一篇我们把旧表改成了“表头只有一行、一行一条记录”的规范形状。形状对了,下一步自然就是在这张表上写一个公式,然后把右下角那个小方块往下拖,填满一整列。
很多人到这一步才发现:第一个格子算得对,拖下去结果就乱了。
问题几乎从来不在公式本身,而在公式里那些形如 B2 的引用——它们不是一个固定地址,而是一个会跟着公式走的位置。
公式里的 B2,其实是“从我这里往左两格”
假设一张订单表:A 列日期、B 列数量、C 列单价、D 列算金额。
在 D2 写 =B2*C2,回车,结果正确。现在把 D2 往下拖到 D10。
D3 里不是 =B2*C2,而是 =B3*C3;D10 里是 =B10*C10。每一行都在乘自己那一行的数量和单价。
原因是:B2 在 Excel 眼里不是“B2 这个格子”,而是“从我所在的格子出发,往左两格、同一行”。D2 往左两格是 B2;公式复制到 D3 之后,出发点变成 D3,往左两格就落在 B3 上了。这就是 相对引用:记的是相对位置,不是绝对坐标。
拖动时,Excel 按你移动的行数、列数,为每一个相对引用重新算位置 1。往下拖一格,所有相对部分的行号加 1;往右拖一格,所有相对部分的列标加 1。
所以“跟着走”不是 Excel 的毛病,恰恰是它的设计。正因为会跟着走,你才只需写一次公式就能拖满整列,不用手敲一百遍。
什么时候“跟着走”就是错的
换一个场景。B 列是美元报价,你想在 C 列算人民币,汇率写在一个固定格子里,比如 F1 填 7.1。
C2 写 =B2*F1,往下拖。C3 变成 =B3*F2——F2 是空的。Excel 在乘除运算里把空单元格当 0 用,于是 C3 显示 0,而且 不报错。继续往下拖,除了第一行,整列都是 0。
你真正想说的是:B 列跟着行走(第 3 行就乘第 3 行的报价),但汇率永远在 F1 那一格,不该动。
办法是在不想动的那部分前面加一个 $。C2 改成:
=B2*$F$1
再往下拖,C3 里是 =B3*$F$1,C10 里是 =B10*$F$1,整列都乘同一个汇率。
于是有两种典型症状,可以当成报警灯:
- 拖下去每一格结果完全一样:该跟着走的被锁死了。
- 除了第一格,下面全是 0 或莫名其妙偏小:该锁的没锁,引用滑到了空白格或别的区域。
$ 锁住的,只是它紧跟着的那一小部分
最常见的误解是以为 $ 会把整个引用锁死。不是。一个引用由两部分组成——列字母 和 行号。而拖动也只分别影响这两部分:往下拖改行号,往右拖改列标。
$ 贴在谁前面,就锁住谁:
$贴在列字母前,比如$B2,往右拖时列标不动。$贴在行号前,比如B$2,往下拖时行号不动。- 两个都贴,
$B$2,整格钉死。 - 一个都不贴,
B2,两头都跟着走。
四种写法各拖一格之后长这样:
| 写法 | 往下一格 | 往右一格 |
|---|---|---|
B2 | B3 | C2 |
$B$2 | $B$2 | $B$2 |
B$2 | B$2 | C$2 |
$B2 | $B3 | $B2 |
官方文档的说法是同一个意思:$A$1 是绝对引用;A$1 和 $A1 是混合引用,只有没加 $ 的那一半会随复制调整 12。
所以写公式前不用背表,问两个问题就够:
- 把这个公式 往下拖 时,这个引用该不该跟着往下走?不该,就在行号前加
$。 - 把它 往右拖 时,该不该跟着往右走?不该,就在列标前加
$。
两个都该跟着走,什么也不加;两个都不该,就都加。
一个天天要用的例子:SUMIF
假设一份明细:B2:B100 是区域,D2:D100 是数量。G 列从 G2 开始列着几个要统计的区域名,H2 要算其中第一个区域的合计。在 H2 写:
=SUMIF($B$2:$B$100, G2, $D$2:$D$100)
这个公式里同时出现两种需求:
- 查找区域
$B$2:$B$100和求和区域$D$2:$D$100:整片数据不能动,所以两端都加$。往下拖到 H3,它还是$B$2:$B$100。 - 条件
G2:你要它跟着换。拖到 H3,它变成 G3,正好是下一个区域名。
如果忘了锁区域,H3 会变成 =SUMIF(B3:B101, G3, D3:D101):起点掉了一行,末端滑到第 101 行,于是第 2 行的数据整条被漏掉,多出来的空行没有影响。结果是数字偏小一点点,还不报错,很容易被误判成“数据本身有问题”。
如果这张汇总表还要往右拖——右边几列换成不同月份的求和——那条件那一列也该锁住列,写成 $G2,这样往右拖时它始终看着 G 列。
混合引用真正不可替代的用场
$B2 和 B$2 这两种写法,典型用场是一张 交叉表:行方向是一类东西,列方向是另一类东西,每个格子要把“本行的东西”和“本列的东西”配在一起。
举个具体例子。第 2 行 B2:M2 是 1 月到 12 月的月份标题;第 3 行 B3:M3 是各月的分摊比例;A4:A10 是七个区域的名称;P4:P10 放着各区域的全年目标。现在要在 B4:M10 这块区域里算出每个区域每个月的目标金额。
在 B4 写:
=$P4 * B$3
然后先往右拖到 M4,再选中 B4:M4 往下拖到第 10 行。看它怎么走:
$P4锁列、放开行:往右拖时它一直盯着 P 列;往下拖时行号跟着变,第 5 行取到$P5,也就是下一个区域的全年目标。B$3锁行、放开列:往下拖时它一直盯着第 3 行;往右拖时列标跟着变,取到C$3,也就是下一个月的比例。
两半各管一个方向,一个跟着行跑、一个跟着列跑,一块公式就铺满整张表。凡是“横竖都要对齐”的表格,都离不开这两种混合写法。
不用手打 $,按 F4
在编辑状态、或者选中编辑栏里的那段引用时按一下 F4,它会在下面这个循环里转 31:
A1 → $A$1 → A$1 → $A1 → A1
不用记顺序,盯着编辑栏看,转到你想要的那个就停手。如果选中的是一整段区域(比如 B2:B100),按 F4 会给两个端点一起加 $,这正好是 SUMIF 里需要的样子。
两个小提醒:Mac 版 Excel 上这个快捷键是 Command + T 1;不少笔记本把 F4 设成了音量或亮度键,需要先按住 Fn 再按。
拖完,抽查最后一格
这一步只花五秒钟,能省掉半小时。公式填完后,点最下面那一格、最右面那一格,看编辑栏里的公式是不是指向了正确的格子。第一格对不代表最后一格对——恰恰相反,引用如果错了,最后一格的偏差最大。
想一次看全,用功能区的“公式 → 显示公式”切换一下,整张表会把公式原文直接显示出来,再点一次切回结果。
两个容易踩的边界
复制粘贴和拖动是同一件事。 Ctrl+C 复制一格公式,粘到下面或右边,相对引用照样按位置移动;拖填充柄只是这件事的快捷方式。跨工作表粘贴也一样,按你贴到的位置重新定位。但 Ctrl+X 剪切移动公式时,引用不会变——公式只是换了个地方待着,它指的还是原来那些格子。
整列引用没有这个问题。 很多人习惯写 =SUMIF(B:B, G2, D:D),往下拖多少行都不用加 $,因为 B:B 表示整列,整列本来就动不了。省事,代价是范围过大、数据多时会拖慢计算;数据量大的时候,写清楚 $B$2:$B$100 更稳妥。