2014-02-17 79 views
0

如果有一種方法使用sumif和countif結合使用?獲取只有重複值的總和

例如,如果我有

TransactionNo|NumberToSum 
    1  | 
    1  | 9 
    2  | 6 
    3  | 3 
    4  | 
    4  | 4 
    5  | 6 
    6  | 4 
    7  | 
    7  | 9 
    8  | 7 
    9  | 4 
    10  | 
    10  | 1 
    11  | 3 
    12  | 6 

我的結果將是:

,因爲值1,4,7,10是重複的,所以我需要總結的9,4,9,1NumberToSum在這種情況下, 。

理想我想沿着其中B是總結的=SumIf(A:A,Count>1,B:B)

線出頭,如果A的內部的計數:A爲> 1

=SUMIF(A:A,COUNT(A:A)>1,B:B)不起作用。

注:數據是,因爲它出現在我的例子不是排序。

如果我想這樣做在VBA一個快速的方法可以是:

Sub sumdups() 
Dim rng As Range 
Dim rng2 As Range 
Dim Sum As Long 

Set rng = [A2:A17] 

For Each rng2 In rng 
    If WorksheetFunction.CountIf(Range("A1:A17"), rng2.Value) > 1 Then 
     Sum = Sum + rng2.Offset(0, 1).Value 
    End If 
Next rng2 
End Sub 

我曾嘗試另一種方法是用公式增加一列

=IF(COUNTIF(A:A,A2)>1,B2,"") 

再總結助手列,但我希望有一個簡單的公式可以在一個單元中完成相同的操作。

我真的只是尋找一個更快的公式,可以輸入到一個單元中,而無需任何額外的計算。

回答

4

這個公式適用於我:

=SUMPRODUCT(1*(COUNTIF(A1:A100,A1:A100)>1),(B1:B100)) 

或整列(稍微慢一點):

=SUMPRODUCT(1*(COUNTIF(A:A,A:A)>1),(B:B)) 
+0

這些愣Excel中,我有超過800,000行處理。是否可以僅在可見單元格上使用此公式?未過濾的行?像'Subtotal()'函數? – user2125348

+1

@ user2125348幾乎所有的公式都會在800k行慢下來,甚至是宏。如果性能非常重要,那麼您可能會考慮使用數據庫,因爲您也接近Excel的行限制(至少是Excel 2007/2010 AFAIK的默認限制) – Jerry

+0

@ user2125348,可能只使用此公式可見的單元格?' - 不,不可能 –