搜索单元格以获取字符列表

时间:2015-12-15 10:21:31

标签: excel excel-formula

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

在下面的示例中,包含a,b或c的单词返回TRUE,而不返回FALSE的单词。这是理想的输出。

enter image description here

我知道如何检测一个角色的存在:

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

并且,如果我确定我有3个字符,我可以将这些ISERROR语句中的三个组合起来:

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

但是你如何为任意长的字符列表执行此操作,如单元格A4中所示?

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

3 个答案:

答案 0 :(得分:2)

知道了!

=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))))

使用 Ctrl - Shift - 输入作为数组公式输入,然后向下复制。

enter image description here

这部分

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

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

-COLUMN($A$1)+1

是确保在有人在列A之前插入列时仍然有效(否则数组将不再从1开始)。在A:

之前添加4列时,示例仍然有效

enter image description here

而不是最后一位,@ EEM建议对字符串中的$A$1单元格引用进行硬编码并使用INDIRECT,这样无论插入任何列,单元格引用都会保持固定。得到的公式有点长,但也可以正常工作:

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

答案 1 :(得分:2)

试试这个公式:

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

基本上是OP发布的公式的改进版本,它消除了使用volatile OFFSET函数

答案 2 :(得分:0)

它不是很漂亮,但如果您知道输入字符串的最大长度,我有一个解决方案:

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

可以将这些内容复制到输入字段的最大长度

然后是C栏中的公式

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

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

H列中的数字与Mid函数一起使用,可以单独拆分字母。 main函数中的偏移量使用第I列中的Count数来确定要在G列中查看的Range的大小。

这可以稍微整理一下,但我觉得当它被分割出来时更容易看到我的想法。

相关问题