答案1
答案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
。最后,SUM
then 作用于结果范围。
总之,我们计算了第一列中有数字的行,其中当前行在列中匹配A
,但在列中不匹配B
。您的条件只是说这些数字是正数。
註釋1:
我们使用*
运算符而不是函数,AND
因为后者默认接受范围作为参数,所以它只会占用临时范围而不是激活“数组模式”并执行逐元素操作。
註釋2:
您可以自由地将列设为绝对列,以便将公式复制到其他列,向范围添加(绝对)行号A:A
并B:B
忽略可能位于同一列的其他内容(以及性能) - 甚至可以将两列创建为命名范围,如IDs
和Fruits
,然后将这些名称放入公式中而不是范围中。