Excel 公式可以根据另一列有选择地搜索一列吗?

Excel 公式可以根据另一列有选择地搜索一列吗?

我该如何创建此公式以应用于 C 列(返回布尔值)?

如果 B2 包含“苹果”,则查看 A2 中的数字是否存在于其行的任何其他 A 单元格中没有B 列包含“apple”。(假设其他行的 B 列中也有“apple”,并且 A 列中可能有重复的数字,也可能没有)。

以下是 C 列中的一些示例数据和所需结果: 在此处输入图片描述

答案1

使用 IF 和 COUNTIFS:

=IF(B2="apple",COUNTIFS(A:A,A2,B:B,"<>"&B2)>0,"")

首先我们检查 B2 是否为“苹果”

其次,我们检查是否有苹果,然后查看是否有与 A2 匹配但在 B 列中不包含“苹果”的

在此处输入图片描述

答案2

快速回答:

您可以使用数组公式来执行此操作。在您的单元格中C2,写入以下内容:

=IF(B2="apple",SUM(ISNUMBER(A:A)*(A:A=A2)*(B:B<>B2))>0,"")

然后使用 Ctrl+Shift+Enter 将其注册为数组公式。之后将其复制到其余列。

解释:

IF函数是普通的排序:如果在 B 列中看到“apple”,则执行操作,否则只写入空字符串。有趣的部分是第二个参数 — 它给出了“apple”情况下的结果。

现在,首先考虑一下 Excel 如何使用更简单的公式:SUM(A:A=A2)。在 中SUM,Excel 看到“范围 = 值”形式的等式。如果两边都是简单值,则计算结果为布尔值,但在这里,由于您使用 Ctrl+Shift+Enter 打开数组公式,因此 Excel对左侧的每个元素分别应用该操作,并将它们存储在内存中的一个临时数组中,该数组SUM欣然接受。因此,结果是列中单元格的数量A等于A2...

SUM嗯,差不多。如果将TRUE值视为 1,将值视为 0 ,情况就会如此。FALSE如果情况并非如此,我们需要将布尔值转换为数字,一种方法是使用双重否定,如下所示:SUM(--(A:A=A2))*实际公式中的运算符也会处理这个问题。

回到实际总和,我们有附加项ISNUMBER(A:A)。原理类似:这将再次对列进行元素运算,A因为它通常不知道如何处理范围。然后,*运算符“乘以”两个包含布尔值的临时范围(基本上是AND对它们应用运算),并为我们提供一个新的布尔值范围。(这只是为了确保空白单元格不被视为等于 0,NOT(ISBLANK(A:A))同样有效。)

最后,我们对附加的布尔值范围执行相同操作,这些布尔值描述列中每个单独的值B是否不是等于B2。最后,SUMthen 作用于结果范围。

总之,我们计算了第一列中有数字的行,其中当前行在列中匹配A,但在列中不匹配B。您的条件只是说这些数字是正数。

註釋1:
我们使用*运算符而不是函数,AND因为后者默认接受范围作为参数,所以它只会占用临时范围而不是激活“数组模式”并执行逐元素操作。

註釋2:
您可以自由地将列设为绝对列,以便将公式复制到其他列,向范围添加(绝对)行号A:AB:B忽略可能位于同一列的其他内容(以及性能) - 甚至可以将两列创建为命名范围,如IDsFruits,然后将这些名称放入公式中而不是范围中。

相关内容