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发布的公式的改进版本,其消除了使用易失性OFFSET
function
得到它了!
=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 – Enterinput ,并复制下来。
这部分
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中查看的范围的大小。
这个可以稍微整理一下,但是我觉得当它像这样分开的时候更容易看到我的想法。