Excel两列数据对比找不同怎么做?四种方法按场景选
做台账、两列数对名单、据对景选核工资表时,比找不同经常需要把两列数据放在一起看差异:A 列是做种上期名单,B 列是按场本期名单,谁新增了、两列数谁漏掉了、据对景选哪个金额对不上。比找不同手工一行行看,做种几十行还行,按场几百行就容易出错。两列数其实 Excel 自带的据对景选几类工具就能解决,关键是比找不同先判断你的需求属于哪一种:是只标记不同,还是做种要找出「只在 A 列有」和「只在 B 列有」,或者还要把对应的按场数值差异算出来。
下面按从简单到复杂的顺序讲四种做法,并说明各自的适用边界。不同 Excel 版本(Microsoft 365、Excel 2021、WPS 表格等)菜单名称略有差异,找不到入口时以你本机软件的实际界面为准。
方法一:条件格式,最快看出「不一样」的单元格
如果两列数据是一一对应的(同一行应该相等),比如 A 列是预算、B 列是实际支出,条件格式是最省事的。选中要对比的区域,例如 A2:B100,在「开始」选项卡里找到「条件格式」→「新建规则」→选择「使用公式确定要设置格式的单元格」,输入公式 =$A2<>$B2,再设一个填充色。确定后,凡是同一行两列不相等的单元格都会被标色。
这里有两个容易踩的坑。第一,公式里的行号不要加美元符号,写成 =$A$2<>$B$2 会导致整片区域只用第一行的结果来判断,标记全乱。第二,如果单元格里是文本,Excel 默认不区分大小写,A1 和 a1 会被判为相同;确实需要区分大小写时,改用 =EXACT($A2,$B2)=FALSE。
方法二:COUNTIF 查「谁不在对方名单里」
更多时候两列并不是一一对应的,而是两份独立的名单,顺序还可能不一样。这时按行对比没有意义,要用查找函数判断某个值在另一列中是否存在。在 C2 输入 =COUNTIF(B:B,A2),向下填充:结果为 0,说明 A2 这个值在 B 列里找不到,属于「A 有 B 无」;再在 D2 输入 =COUNTIF(A:A,B2) 向下填充,就能找出「B 有 A 无」。
用 COUNTIF 时要注意匹配精度。它按「包含」逻辑处理部分通配符,如果数据里带 * 或 ?,可能误判;另外数字 1001 和文本「1001」在部分场景下会被当作同一个值,导致结果看起来对、实际不对。稳妥的做法是先用「数据」选项卡里的「分列」或 TRIM、CLEAN 把空格和不可见字符清掉,并把两列的格式统一成同一种类型,再做对比。
方法三:删除重复项或高级筛选,直接拿到差异清单
不想写公式的话,可以把两列复制到同一列里,用「数据」→「删除重复项」,剩下的就是只出现过一次的值——但这个方法有个明显缺陷:它无法告诉你这个值原本属于哪一列,只能得到一份「差异集合」。更适合核对名单的做法是「高级筛选」:把 A 列作为列表区域,把 B 列设为条件区域,选择「将筛选结果复制到其他位置」,就能筛出 A 列中不在 B 列出现的项。
如果只是临时核对一次,还有个土办法:把两列分别排序后上下拼接,用条件格式标记重复值,没被标记的就是独有的。这个方法胜在不用记公式,缺点是操作步骤多、容易漏选区域,适合数据量在几百行以内的情况。
方法四:Power Query 做可重复的对比
如果这类核对每周都要做一次,或者数据量上万行,建议用 Power Query(Excel 2016 及以上在「数据」选项卡里)。把两张表分别「从表格」导入,然后用「合并查询」做左反连接和右反连接,就能分别得到「仅在表 1 出现」和「仅在表 2 出现」的结果。优点是步骤被记录下来,下次换数据只要点「全部刷新」,不用重新走一遍流程,也不容易因为手工选区出错。
需要提醒的是,无论用哪种方法,对比结果都依赖源数据的干净程度。前后空格、全角半角、日期被存成文本、身份证号等长数字被科学计数法截断,都是常见的「假差异」来源。发现结果异常时,先抽查几条被标记的记录,用 LEN 看字符长度、用 =A2=B2 直接判断,往往能定位到问题所在。
小结一下:两列一一对应就用条件格式,两份独立名单用 COUNTIF 或高级筛选,需要反复执行就交给 Power Query。动手前先统一数据格式、清掉空格,比对后再抽查几条结果验证,基本就能把两列数据找不同的活儿做稳。