Excel:在数组中sorting效果

我目前正在使用这个expression式来检查一个单元格是否至less包含一组string中的一个:

AB 1 abcd =ISNUMBER(SEARCH({"a","x"},A1)) 

B1会在这里返回true。 但是,如果我改变数组的顺序如下,它返回false:

  AB 1 abcd =ISNUMBER(SEARCH({"x","a"},A1)) 

这是为什么? 有没有更好的方法来做到这一点比使用一堆OR()的更优雅?

为了完整起见,对“原因是什么? 即为什么结果似乎对花括号中的string的顺序敏感的是公式

 =ISNUMBER(SEARCH({"a","x"},A1)) 

只看第一个string“a”,因为没有任何东西像数组公式那样操作,并且遍历所有值“a”,“x”等。

通常的过程是将函数包装在一个像SUM这样的聚合函数中。 如果你这样做,你还必须添加减号,使ISNUMBER中的TRUE / FALSE值为1和0,并进一步包装在SUMPRODUCT中或作为数组公式运行:

 =SUMPRODUCT(SUM(--ISNUMBER(SEARCH({"a","x"},A1)))) 

即使如此,它提供了一个数字结果,这不是你真正想要的。

@Dick Reichel的想法因此更好地给你:

 =OR(ISNUMBER(SEARCH({"a","x"},A1))) 

工作非常好,顺便说一句,不需要input数组公式。

假设我们在A1中有文本,并且C列中还有一个子string列表。 这些可以是单个或多个字符子string。 我们将NameKeyStrings分配给列C中的单元格列表

我们想知道A1中是否存在任何子串。

B1中input以下内容:

 =NOT(LEN(TRIM(SUBSTITUTE(A1,INDEX(KeyStrings,SUMPRODUCT(ROW(KeyStrings)*ISNUMBER(SEARCH(KeyStrings,A1)))),"")))=LEN(A1)) 

如果列C中的任何子string可以在A1中find,那么该公式将报告为True

在这里输入图像说明

我认为,因为你已经把一个大括号,它表示一个数组search。 (我不是数组的专家,所以以下是一个有教养的猜测)。

在第一个例子中,Excel正在做的是在位置1find“a”,所以它将第一个返回给ISNUMBER函数,它是TRUE 。 (基本上,比较“a”和位于abcd的位置是1,没有find/?查找“x”。返回1为“a”,对于ISNUMBER函数为TRUE

在第二个代码中,“x”与来自abcd的a进行比较,abcd返回一个非数字值(并且没有find/查找[?]“a”),因此它是FALSE

PS:

我的意思是Excel没有find/查找[?]第二个或其上的任何元素,似乎是基于如何编码数组和公式。在大括号中,逗号分隔“列”和分号单独的“行”。 所以你在一个search函数中input一个2列/ 1行数组。 虽然没有什么不对,但是SEARCH函数本身可能不会被编码去查找数组中除位置[1,1]之外的任何元素。 有人更好地通知searchfunction的内部工作应该证实这个答案。 (如果这是一个完全错误的教育猜测,我不介意把它关掉)