繁体   English   中英

检查一列的任何值是否包含另一列的任何值

[英]Check if any values of one column contains any values from another column

因此,我有一个公式一直在使用,以查看一列中的任何单元格是否与另一组值中的任何单元格相匹配(在另一个称为公司的工作表中):

 =IF(ISERROR(VLOOKUP(K1,companies!A:A,1,FALSE)),"Keep","Delete")

现在,我尝试做完全相同的事情,只是现在,我想查看是否有任何单元格包含单元格的任何子字符串(companies!A:A),而不是匹配。 不确定如何执行此操作。

=IF(ISERROR(VLOOKUP(CONCATENATE("*",K1,"*"),companies!A:A,1,FALSE)),"Keep","Delete")

只需将您的K1引用更改为CONCATENATE("*",K1,"*") ,即可基于vlookup通配符。

这是一张显示此工作方式的图像,尽管将其修改为一张纸。 您会看到一个,四个和五个被删除,因为它们包含在列表中,但不完全包含在列表中。

编辑因此,在评论中进行了一些讨论之后,发现以上内容是对需求的一种误解。 这个问题实际上是想知道某个值是否包含另一列中的任何字符串,这在问题上要困难得多-但这使我感到烦恼,所以我进行了研究,我认为我有所收获这样可行。

公式如下:

=IF(OR(ISNUMBER(SEARCH("*"&$H$2:$H$14&"*",I2))),"Delete","Keep")

必须使用CTRL-SHIFT-ENTER输入它,以使其成为数组函数才能工作

还必须明确定义引用列(即H#:H#,而不是H:H),否则所有内容将返回true,因为数据下方的空白单元格将匹配任何内容。

话虽如此,您将知道它是一个数组函数,因为它将在公式栏中的公式两边带有方括号,如下所示。

数组公式

我强烈建议您浏览“评估公式”工具,以了解自己的工作方式,但是我将在下面以匹配行的示例为依据,对其进行详细说明,因为它更加明显。

首先,excel将您的引用和连接评估为单元格值的数组,并将您的引用替换为要搜索的字符串,因此我们得到如下信息:

=IF(OR(ISNUMBER(SEARCH({"*john*";"*jack*";"*fake*";"*bill*";"*bob*";"*test*";"*blah*";"*hey*";"*words*";"*ten*";"*eleven*";"*jim*";"*susie*"},"fake@example.org"))),"Delete","Keep")

然后,Excel将针对您要搜索的字符串对每个术语进行搜索,这将返回结果的数组。 没有匹配项时,注释搜索将返回“ #VALUE”。

=IF(OR(ISNUMBER({#VALUE;#VALUE;1;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE;#VALUE})),"Delete","Keep")

然后,Excel对这个数组执行IsNumber,然后再次将True / False结果存储在数组中。

=IF(OR({FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}),"Delete","Keep")

然后,我们添加了OR,它将对数组求值,如果任何结果为True,则返回True,然后对If求值。

似乎可以正常工作,尽管性能可能会影响大型数据集。 这种东西将更适合某种SQL工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM