search单元格中的字符列表

我有一个单元格列出任意数量的字符,例如abc 。 如何使用Excel公式检测给定的其他单元是否包含一个或多个这些字符?

在下面的例子中,其中有a,b或c的单词返回TRUE,而那些不返回FALSE的单词。 这是所需的输出。

在这里输入图像说明

我知道如何检测一个字符的存在:

 =NOT(ISERROR(SEARCH("a",B4))) 

如果我知道我有3个字符,我可以结合这三个ISERROR语句:

  =NOT(AND(ISERROR(SEARCH("a",B4)),ISERROR(SEARCH("b",B4)),ISERROR(SEARCH("c",B4)))) 

但是如何处理A4单元格中任意长的字符?

请注意,我不是在寻找一个VBA解决scheme; 我已经可以做到了。

试试这个公式:

 =NOT(AND(ISERROR(SEARCH(MID($A$4, COLUMN(INDEX($1:$1,1):INDEX($1:$1,LEN($A$4))),1),$B4)))) 

基本上是由OP发布的公式的改进版本,其消除了使用易失性OFFSETfunction

得到它了!

 =NOT(AND(ISERROR(SEARCH(MID($A$4, COLUMN($A$1:OFFSET($A$1,0,LEN($A$4)-1))-COLUMN($A$1)+1,1),$B4)))) 

或稍微变化,以缩短一点:

 =NOT(AND(ISERROR(SEARCH(MID($A$4, COLUMN(OFFSET($A$1,0,0,1,LEN($A$4)))-COLUMN($A$1)+1,1),$B4)))) 

作为数组公式使用CtrlShiftEnterinput ,并复制下来。

在这里输入图像描述

这部分

 COLUMN($A$1:OFFSET($A$1,0,LEN($A$4)-1))-COLUMN($A$1)+1 

只是返回一个数组{1,2,3 …,数字或字符来search}的技巧。 在这个例子中,{1,2,3,4,5}。 最后一点

 -COLUMN($A$1)+1 

是确保这个工作仍然有效,如果有人在列A之前插入列(否则数组将不再从1开始)。 A之前添加了4列的示例仍然有效:

在这里输入图像描述

而不是最后一位,@EEMbuild议硬编码string中的$A$1单元格引用,并使用INDIRECT ,这样单元格引用保持固定,而不pipe插入的列是什么。 由此产生的公式有点长,但工作得很好:

 =NOT(AND(ISERROR(SEARCH(MID($C$4, COLUMN(INDIRECT("$a$1"):OFFSET(INDIRECT("$a$1"),0,LEN($C$4)-1)),1),$D4)))) 

这不是很漂亮,但是如果你知道inputstring的最大长度,我有一个解决scheme:

 In Column H numbered list from 1 to [Max Length] In G1 I entered =MID($A$4,H1,1) and copied down In I1 I entered =IF(H1<=LEN($A$4),H1,"") and copied down 

这些可以被复制到input字段的最大长度

然后C列中的公式

 {=IF(SUM(IFERROR(SEARCH(OFFSET($G$1,0,0,COUNT($I:$I),1),B4),0))>0,"TRUE","FALSE")} 

作为范围公式input(ctrl + shift + enter)

H列中的数字与Mid函数一起使用可将字母单独分开。 主函数中的偏移量使用列I中的数字计数来确定要在列G中查看的范围的大小。

这个可以稍微整理一下,但是我觉得当它像这样分开的时候更容易看到我的想法。