前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >问与答130:如何比较两列文本是否完全相同?

问与答130:如何比较两列文本是否完全相同?

作者头像
fanjy
发布2021-08-31 17:42:41
1.9K0
发布2021-08-31 17:42:41
举报
文章被收录于专栏:完美Excel

Q:最近,我的一项任务是需要比较包含多行数据的两列中,每行对应列的文本是否完全相同。例如,列A中有一系列文本,列B中也有一系列文本,比较A1中的文本是B1中的文本是否完全相同,A2与B2中的文本是否完全相同,……,等等。

完全相同意味着仅“Ant”=“Ant”和“ant”=“ant”才通过测试,而“Ant”=“ant”则不会通过测试。

这样,简单地使用:

=A1=B1

对于“Ant”和“ant”肯定返回TRUE。因为它们不区分大小写。

怎样才能进行区分大小写的比较呢?

A:可以使用EXACT函数。

=EXACT(文本1, 文本2)

EXACT函数比较两个字符串是否完全相同,它执行区分大小写的比较。

然而,假设想测试“Ant”是否与“ant”完全相同但不允许使用EXACT函数,如何做?

一种方法是将两个文本值转换为它们的ASCII等效值,然后以某种方式比较这两组值。不能比较这些值的总和,因为对于不同的文本(例如“Aa”和“aA”),总和是相同的。因此,应以其他方式比较它们的ASCII值。

可以使用公式:

=CODE(MID(text, {1;2;3;4;5;6;7;8;9;10}, 1))

获取每个字符的代码。这里,假设要测试的任何字符串的最大长度只有十个字符。更短的字符串对于MID函数来说没有问题,那是因为当MID函数尝试返回例如一个四字符字符串的第十个字符时,它返回一个空字符串。

但是,当CODE尝试返回空字符串的ASCII值时,Excel会返回#VALUE!错误。这意味着必须将公式包装在IFERROR函数中,如下所示:

=IFERROR(CODE( MID( “Aa”,{1;2;3;4;5;6;7;8;9;10}, 1) ),””)

其结果应该如下:

{65;97;””;””;””;””;””;””;””;””}

也就是说,公式返回了一个由两个数字和八个空字符串组成的数组。

那么,如何比较两个数组呢?很简单:

={1;2;3}<>{3;2;1}

中间结果为:

={TRUE; FALSE; TRUE}

如果将比较公式改写为:

=({1;2;3}<>{3;2;1})+0

中间结果为:

={1;0;1}

对其求和,即:

=SUM(({1;2;3}<>{3;2;1})+0)

返回一个大于0的数值,表明两个数组不匹配。

基于上述原理,如果想要比较两列中的文本是否完全相同,对于单元格A1和B1的比较来说,可以使用公式:

=SUM((IFERROR(CODE(MID(A1,{1;2;3;4;5;6;7;8;9;10},1)),"")<>IFERROR(CODE(MID(B1,{1;2;3;4;5;6;7;8;9;10},1)),""))+0)

当单元格A1和B1中的文本不匹配时,将返回一个非零值,并且这个公式应该适用于支持IFERROR函数的任何版本的Excel——只要相比较的文本的长度不超过10个字符。

当然,使用EXACT更简单。后面的只是练练手而已!

注:本文的问题来源于exceluser.com,供有兴趣的朋友参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档