Menu

Excel 如何比较两列数据是否匹配

逐行比较两列用 =A2=B2(区分大小写用 EXACT)。要找出一列中有、另一列中没有的值,用 COUNTIF、MATCH 或 XLOOKUP,再用条件格式突出显示差异。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

要逐行比较两列,在第一行旁边输入 =B2=C2 并向下填充:TRUE 表示两个单元格相同,FALSE 表示不同。如果要找出一列中的值是否以任意顺序出现在另一列中,改用 =COUNTIF($B$2:$B$8,A2)>0。

旧价格与新价格
D2
ABCDE
1ProductOldNewSame?Status
2Apple$1.20$1.20TRUESame
3Pear$1.50$1.60FALSEChanged
4Carrot$0.80$0.80TRUESame
5Bread$2.40$2.20FALSEChanged
6Milk$1.10$1.10TRUESame
7Cheese$4.50$4.90FALSEChanged
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

D3、D5 和 D7 为 FALSE,条件格式规则 =$B2<>$C2 给这三行着色。E 列用文字代替 TRUE 和 FALSE 显示同样的判断。把 C3 改成 1.5,第 3 行就变成 Same。

用 IF 比较两列

=B2=C2 返回 TRUE 或 FALSE。用 IF 包起来就能自己选择显示的文字:=IF(B2=C2,"Same","Changed"),就像上面的 E 列。如果想让相同的行留空、只标出差异,用 =IF(B2<>C2,"Changed","")。如果想看数字变化了多少,就不用比较而用减法:=C2-B2。

不用辅助列也能统计差异个数,在 SUMPRODUCT 中比较两个区域即可:对上面的表格,=SUMPRODUCT(--(B2:B7<>C2:C7)) 返回 3。

不用公式的方法:选中 B2:C7,并让 B2 成为活动单元格,打开 开始 > 查找和选择 > 定位条件,选择 行内容差异单元格,然后点击确定(在 Windows 上按 Ctrl+\ 效果相同)。Excel 会选中 C3、C5 和 C7,即同一行中与 B 列不同的单元格;给它们设置填充颜色就能标记出来。

用 EXACT 区分大小写比较

= 比较会忽略大小写:ab12 等于 AB12。当大小写很重要时(产品代码、密码、ID),用 EXACT(A2,B2),只有两段文本逐字符完全相同时才返回 TRUE。

大小写不同的代码
C2
ABCD
1CodeEnteredEqual?EXACT
2AB12AB12TRUETRUE
3CD34cd34TRUEFALSE
4EF56EF56TRUETRUE
5GH78Gh78TRUEFALSE
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C 列用的是 = 比较,认为四行全部匹配。EXACT 则认为第 3 行和第 5 行不同,因为 cd34 和 Gh78 用了小写字母。

找出一列中有、另一列中缺少的值

当两个列表顺序不同时,要把每个值和另一整列进行比较。COUNTIF($B$2:$B$8,A2) 统计 A2 在 B2:B8 中出现的次数,所以 >0 表示“找到了”,=0 表示“缺少”。$ 符号让公式向下填充时查找区域保持固定。

1 月和 2 月的客户
C2
ABCD
1JanuaryFebruaryIn February?With MATCH
2AnaDanTRUETRUE
3BenFayTRUETRUE
4CaraAnaFALSEFALSE
5DanGusTRUETRUE
6EveHalFALSEFALSE
7FayIvyTRUETRUE
8GusBenTRUETRUE
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Cara 和 Eve 为 FALSE:她们 1 月买过,2 月没有。MATCH 用另一种方式得到同样的答案:MATCH(A2,$B$2:$B$8,0) 返回 A2 在 B 列中的位置,找不到时返回 #N/A,ISNUMBER 再把结果转换成 TRUE 或 FALSE。要反过来检查(2 月的新客户),在 B 列旁边放同样的公式,并交换区域:=COUNTIF($A$2:$A$8,B2)>0。

比较两个列表并返回匹配的值

很多时候,问题不只是“有没有”,而是“旁边的值是否一致”。这里把发票和一份顺序不同的付款列表进行比较:XLOOKUP 在付款中找到每张发票,返回已付金额,D 列再把它与发票金额比较。

发票与付款对账
C2
ABCDEFG
1InvoiceAmountPaidMatch?Payment forPaid
2INV-101120120TRUEINV-103240
3INV-10285Not paidFALSEINV-101120
4INV-103240240TRUEINV-105140
5INV-1046060TRUEINV-10695
6INV-105150140FALSEINV-10460
7INV-1069595TRUE
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

INV-102 没有付款,所以 C3 显示 Not paid。INV-105 付了 140 而不是 150,所以 D6 也是 FALSE。XLOOKUP 的最后一个参数 "Not paid" 会替代找不到值时出现的 #N/A。XLOOKUP 需要 Excel 2021 或 Microsoft 365;在 Excel 2019 中使用 =IFERROR(VLOOKUP(A2,$F$2:$G$6,2,FALSE),"Not paid")。其他参数见 XLOOKUP 页面。

列出另一列中缺少的值

除了生成一列 TRUE/FALSE,FILTER 还能把缺少的值直接列成一个列表。COUNTIF(B2:B8,A2:A8) 的第二个参数是区域,会一次性统计 A 列的每个值,FILTER 再保留计数为 0 的那些。

哪些客户没有回来
D2
ABCD
1JanuaryFebruaryNot in February
2AnaDan
3BenFay
4CaraAna
5DanGus
6EveHal
7FayIvy
8GusBen
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 D2 中,列出不在 2 月名单中的 1 月客户。

答案会溢出显示 Cara 和 Eve。=FILTER(A2:A8,ISNA(MATCH(A2:A8,B2:B8,0))) 也可以。如果所有客户都回来了,FILTER 会返回 #CALC!;为这种情况加上第三个参数:=FILTER(A2:A8,COUNTIF(B2:B8,A2:A8)=0,"None")。FILTER 需要 Excel 2021 或 Microsoft 365。更多条件写法见 FILTER。

突出显示两列之间的差异

上面的公式也可以用作条件格式规则。选中第一个列表,打开 开始 > 条件格式 > 新建规则 > 使用公式确定要设置格式的单元格,输入针对第一个单元格的公式。这里 A2:A8 使用 =COUNTIF($B$2:$B$8,A2)=0,B2:B8 使用 =COUNTIF($A$2:$A$8,B2)=0:只在其中一个列表中出现的名字都会被着色。

只在一个列表中出现的名字
A1
AB
1JanuaryFebruary
2AnaDan
3BenFay
4CaraAna
5DanGus
6EveHal
7FayIvy
8GusBen
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

1 月中的 Cara 和 Eve 被着色,2 月中的 Hal 和 Ivy 被着色。如果两列应该逐行一致,就在两列上都使用规则 =$A2<>$B2,就像本页的第一个表格。如果想给两个列表中都有的名字着色,改用 >0,参见突出显示重复项页面。

为什么相同的值显示为不同

最常见的原因是看不见的空格:末尾带空格的 Ana 不等于 Ana。从其他系统或网页粘贴来的数据经常带有这种空格。改为比较去除空格后的值。

隐藏的空格
C2
ABCD
1NameOther listEqual?Trimmed
2AnaAna FALSETRUE
3BenBenTRUETRUE
4Cara CaraFALSETRUE
5DanDanTRUETRUE
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C 列认为第 2 行和第 4 行不同;D 列在 TRIM 去掉两端空格之后,认为四行全部匹配。另一个常见原因是一列中的数字以文本形式存储,而另一列中是真正的数字:101 和 '101 看起来一样,但 Excel 的 = 比较返回 FALSE,MATCH、VLOOKUP 和 XLOOKUP 也无法在一个中找到另一个。COUNTIF 是例外:它会把看起来像数字的文本当作该数字读取,所以认为二者相等。单元格角上的绿色小三角标记了文本版本;用 =VALUE(A2) 或 =A2*1 转换,或者选中这些单元格,从警告图标中选择 转换为数字。

常见问题

如何在 Excel 中比较两列是否匹配?

逐行比较:在 C2 中输入 =A2=B2 并向下填充;TRUE 表示两个单元格相同。要检查 A 列的每个值是否出现在 B 列的任何位置,用 =COUNTIF($B$2:$B$8,A2)>0。

如何比较两列并返回第二列中的值?

查找这个值:=XLOOKUP(A2,$F$2:$F$7,$G$2:$G$7,"Not found") 返回 G 列中的匹配值,找不到则返回 Not found。在 Excel 2019 及更早版本中,使用 =IFERROR(VLOOKUP(A2,$F$2:$G$7,2,FALSE),"Not found")。

Excel 比较两个单元格时区分大小写吗?

不区分。=A2=B2 把 abc 和 ABC 视为相等。要区分大小写,用 =EXACT(A2,B2),只有每个字符(包括大小写)都相同时才返回 TRUE。

如何列出在一列中有、另一列中没有的值?

在 Excel 365 和 2021 中,=FILTER(A2:A8,COUNTIF(B2:B8,A2:A8)=0) 会把 A2:A8 中所有未出现在 B2:B8 中的值溢出显示出来。

为什么 Excel 说两个相同的值不一样?

通常是其中一个多了空格,或者是以文本形式存储的数字。用 =TRIM(A2)=TRIM(B2) 比较以排除空格,并用 =VALUE(A2) 或 =A2*1 转换文本数字。

Coddy 编程语言插图

和 Coddy 一起学编程

开始