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

时间:2015-03-26 16:33:19

标签: excel excel-formula vlookup

所以我有一个公式,我一直用来查看一列中的任何单元格是否与另一组值中的任何单元格匹配(在另一个名为公司的表格中):

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

现在我正在尝试做同样的事情,只是现在我想看看是否有任何单元格包含单元格的任何子串(公司!A:A)而不是MATCH。不知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

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

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

Here's an image showing this working, though modified to all be in one sheet.您可以看到有一个,四个和五个被删除,因为它们包含在列表中,但在列表中并不完全。

编辑所以经过评论中的一些讨论后,事实证明以上是对需求的误解。问题实际上是希望能够看到某个值是否包含另一列中的任何字符串,这对问题来说有点困难 - 但这让我感到烦恼所以我努力了,我想我已经有了一些东西这很有效。

这是公式:

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

必须使用CTRL-SHIFT-ENTER输入,才能使其成为一个可以使用的数组函数

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

所有人都说,你会知道它的数组函数,因为它会在公式栏中的公式周围有括号,如下所示。

array formula

我强烈建议您阅读“评估公式”工具,看看它是如何运作的,但我会在下面最好地分解它,使用匹配行的示例,因为它更明显。

首先,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工具。