先给结论:三种场景怎么选
对比两列之前,先问自己要什么结果,三个常见需求对应三套做法:
| 你要的结果 | 用这个方法 | 一句话 |
|---|---|---|
| 把不一致的行高亮出来 | 条件格式(用公式) | 眼睛一扫就看到哪行不同 |
| 逐行列清单:哪些行相同/不同 | =IF(A2=B2,相同,不同) | 多出辅助列,可筛选、可计数 |
| 找A列有、B列没有的项 | =COUNTIF(B:B,A2)=0 | 专门查缺项、查漏登 |
关于功能入口的说明:条件格式、IF、COUNTIF 都是 Excel / WPS 表格的内置功能,直接在单元格输入等号 = 写函数,或点"开始 - 条件格式"即可,菜单位置以你软件的实际界面为准(不同版本略有差异)。本文讲清公式与设置,面板随版本而变。
什么是"对比两列差异"
所谓对比两列,本质就是逐行判断 A 列和 B 列同一行的数据是不是相等,或者判断某个值是否同时存在于两列。按目的分两类:
- 逐行比对:第 2 行 A2 对 B2、第 3 行 A3 对 B3……看"同一行左右是否一致"。适合两边是同一批记录的对照(如新旧系统导出的同一张表)。
- 集合比对:不关心行号,只关心"这个值在不在另一列里"。适合两列不是同一顺序、甚至行数都不一样(如名单比对、入库单 vs 台账)。
先分清你要的是"逐行"还是"集合",方法会不一样:逐行用 =A2=B2 类,集合比对用 COUNTIF / MATCH。
为什么要做列对比
- 两批数据对账:财务常遇到"系统导出的明细"和"另一张表"对不上,逐列比对能快速定位差异行。
- 查漏登 / 查重:两列名单比一比,就知道谁在A不在B、谁录了两次。
- 录入后自检:手工合并两份表后,用公式扫一遍"有没有串行、有没有错位",比肉眼靠谱得多。
- 避免串行漏行:几百上千行肉眼对,出错概率高且慢;公式一次写对,整列下拉即可。
三种方法怎么操作
方法一:条件格式高亮"逐行不同"
适合想直接在原表上看到哪几行不一样:
- 同时选中要对比的两列区域(如
A2:A100与B2:B100,按住 Ctrl 可选不连续区域)。 - 开始 → 条件格式 → 新建规则 → 选择"使用公式确定要设置格式的单元格"。
- 在公式框输入:
- 点"格式"选一个填充色(如浅红),确定。两列中同一行不相等的单元格会被高亮。
只想高亮其中一列也行:选中 A2:A100,公式写 =$A2<>$B2,只有 A 列里"和同行 B 不一样"的会被标色。
方法二:公式列清单"逐行相同/不同"
适合要一个可筛选、可计数的结果列:
- 结果是"相同 / 不同"两值,筛选"不同"就能只看有差异的行。
- 想统计有多少处不同,在旁边写
=COUNTIF(C:C,不同)。 - 两边可能有空格导致"看着一样却不同",可改用
=IF(TRIM(A2)=TRIM(B2),相同,不同)先去首尾空格。
方法三:找"A列有、B列没有"的项
适合集合比对(两列顺序、行数都可能不同):
COUNTIF($B:$B,$A2)数 A2 在 B 列出现几次;等于 0 即"没有"。- 想反向查"B列有、A列没有",把两列引用对调即可。
- 也可以用
=IF(ISNA(MATCH($A2,$B:$B,0)),缺,有),MATCH 第3参数 0 表示精确匹配,找不到返回 #N/A,用 ISNA 包住判断。
还有个快捷键:选中两列后按 Ctrl+\(Ctrl + 反斜杠),Excel 会定位"行内容有差异的单元格"并选中,再统一填充个底色即可。它比条件格式快,但只标"同行不同",且不生成清单。
关键设置:公式与范围
- 条件格式公式里的 $ 怎么加:选中区域从第 2 行开始时,写
=$A2<>$B2——列绝对(锁 A、B 两列)、行相对(随行变化)。若写成=A2<>B2且区域含多列,引用会横向漂移,高亮全乱。 - 公式下拉时列别跑:方法二、三里引用 A、B 列建议加
$(如$A2),否则整列下拉到 D、E 列就比错对象。查找列(B列)用$B:$B整列引用不用锁行。 - 比较"文本"还是"数值":
A2=B2对两者都适用,但"123"(文本)和 123(数值)在 Excel 里不相等。比不出来先确认两边格式一致(选中看顶上格式是"常规/数值"还是"文本")。 - 集合比对用整列还是固定范围:数据量不大时
$B:$B整列最省事;数据很大(几万行)且要反复算,建议限定到实际范围如$B$2:$B$5000提速。 - 大小写是否敏感:默认
=A2=B2和 COUNTIF 都不区分大小写(abc 与 ABC 算相等)。要区分大小写得用 EXACT:=IF(EXACT(A2,B2),相同,不同)。
别忽略"空格"和"不可见字符"。最常见翻车:两列看着一字不差,公式却判"不同"。原因常是某一侧多了首尾空格或换行符。先用 TRIM 清首尾空格再比;顽固的不可见字符可用 CLEAN,或把两列"复制→粘贴为值"再比一次。
几个最容易翻车的坑
- 坑 1 · 条件格式没锁列:写
=A2<>B2却选了多列区域,公式引用随列右移,高亮错位。→ 列加 $ 写成=$A2<>$B2。 - 坑 2 · 文本型数字 vs 数值:"001"当文本、"1"当数值,比出来不一样。→ 统一格式(分列 / 乘 1 / VALUE 转换)后再比。
- 坑 3 · 两边有空格:肉眼看一样,公式说不同。→ 套 TRIM/CLEAN,或粘贴为值。
- 坑 4 · 行数/顺序不一致还逐行比:两列本就不是同一顺序,用
=A2=B2会大面积"假不同"。→ 改用 COUNTIF/MATCH 做集合比对。 - 坑 5 · 大小写被当相同:要区分大小写的场景(如编码)用了默认比较,漏掉差异。→ 用 EXACT 函数。
常见问题
$ 加错或选中区域起点行不对。规则公式应基于"选中区域的第一行"来写:若从 A2 起选,就写 =$A2<>$B2。可在"条件格式 - 管理规则"里看"应用于"的范围和公式是否匹配。=IF(COUNTIF($B:$B,$A2)=0,缺,有),筛"缺"即得A有B无;再在 D 列对调写成 =IF(COUNTIF($A:$A,$B2)=0,缺,有) 找B有A无。两边"缺"的拼起来就是全部差异项。=A2=B2 本身是比较运算,结果就是逻辑值 TRUE/FALSE。要显示成"相同/不同",得用 IF 包一层:=IF(A2=B2,相同,不同)。TRUE 即相同、FALSE 即不同。$B:$B,改成实际范围如 $B$2:$B$50000;② 比对前把辅助列"复制→粘贴为值",减少重复计算。差异定位清楚后,条件格式可删掉规则保留底色,进一步减负。