答案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
然後對結果範圍進行操作。
總之,我們計算了第一列中包含數字的行,其中當前行在 列 中匹配A
,但在 列 中不匹配B
。你的情況只是表明這些數量是正面的。
備註1:
我們使用*
運算子而不是函數,AND
因為後者預設接受範圍作為參數,因此它只會消耗臨時範圍,而不是啟動「陣列模式」並執行元素操作。
備註2:
您可以自由地將列設為絕對值,以便將公式複製到其他列,將(絕對)行號新增至範圍中,A:A
並B:B
忽略可能位於同一列中的其他內容(以及效能),甚至為兩個列指定命名範圍IDs
和Fruits
,然後將這些名稱而不是範圍放入公式中。