答案1
至少有兩種簡單的方法可以做到這一點。兩者都「過濾」所需的值,然後進行算術運算。
一種是直接的,使用SUMPRODUCT()
您看起來滿意的值,但對值清單進行過濾,以便選擇合適的項目進行處理。它用於FILTER()
選擇符合條件的行,然後FILTER()
再次用於從內部結果中選擇列FILTER()
:
=SUMPRODUCT( FILTER( FILTER(B1:D12, B1:B12=I1), {0,1,0}), FILTER( FILTER(B1:D12, B1:B12=I1), {0,0,1}))
如所呈現的公式假設找出輸入單元格為 I1 供學生尋找。當然,列的範圍是數千,而不是 12。
然而,為了處理“THOUSANDS”,可以根據需要簡單地使用第一列,只需將位址變更為一個範圍即可。或者,如果一個(看起來可能)在說“數千”時也表示“全部”,則可以使用UNIQUE()
其第三個參數集來FALSE
提取這些“數千”中每個學生姓名的單個實例的列表。然而,即使創建該數組,似乎也不能僅用於I1#
捕獲整個結果。我認為這是由於查找範圍的長度不同以及UNIQUE()
.
FILTER()
實際上為其中包含的行建立一個 TRUE/FALSE 結果清單。這裡的「技巧」是,您可以透過直接鍵入該清單來取得所需的列(例如:{0,1,0} 以選擇第二列)。儘管您絕對可以透過使公式動態化的方式來建立這些數組,但硬編碼實際上很有用。在這裡,永遠不需要。
請記住,可以用來INDEX()
選擇要用於SUMPRODUCT()
的陣列的列。就我個人而言,我認為這更容易,但沒有太大區別。
就這麼多。一種更老式的方法,適用於相當舊版本的 Excel,只需進行範圍比較來「過濾」資料並將其呈現給SUMPRODUCT()
:
=SUMPRODUCT( IF(B1:B12=I1, C1:C12, 0), IF(B1:B12=I1, D1:D12, 0) )
函數中的每個數組都由 ' 提供,IF()
它只是將查找範圍與該行的 I 列單元格進行比較(是的,這兩種方法都不是SPILL
公式,因此您必須向下複製到I 列中延伸的範圍UNIQUE()
)並傳回將兩列資料放入函數的參數中。
直接、清晰、簡單,多年來易於理解和維護。應該很快,因為它使用簡單的 TRUE/FALSE 測試,而不是函數。這兩種方法都沒有使用SPILL
其列中的功能SUMPRODUCT()
,因此兩者都沒有優勢。
但這個僅使用您顯然熟悉的功能,所以為什麼不呢?
實際上,令人討厭的部分是列出獨特的學生名單,SPILL
以便該任務也能很好地發揮作用。