2012-05-05 185 views
1
APC NM000038 
APC NM000038 
APC NM000038 
APC NM000038 
APC NM001127510 
APC NM001127510 
APC NM001127510 

我試圖在Excel中統計重複的數據。我無法找到相關的答案,所以我只是問這裏。並感謝您提前回答。Excel ---計算重複數據

我正在嘗試countif - 有兩列信息。如果 列中的值A =某些標準,我想要計算在列B中出現值 的次數(不計算列B中的相同值,只計算不同的值) - 並非列A中的所有值對應於b列 值。因此,如果我想查看有多少女性收到「5」,我需要查看 A列中有多少「女性」在B列中有相應的值「5」。 (並非所有女性都有「5」 ,值可以是1到5)

在上述例子中,我期望

NM001127510 2 
NM000038  2 
+0

通常,'總結以上(多值匹配)'可以用'SUMIF'完成。你會澄清你的數據是如何組織的嗎? A和B列是什麼? –

+5

此表不應該是:'NM001127510 3'和'NM000038 4'嗎?或者我錯過了什麼? – lnafziger

回答

3

假設你數據是在單元格A1到B1000,用這個公式

=SUMPRODUCT((A1:A1000="APC")*(B1:B1000="NM000038")) 

類似

=SUMPRODUCT((A1:A1000="APC")*(B1:B1000="NM001127510")) 

隨訪

我這樣做,但數據集是巨大的,幾百MB的Excel文件。我不能確定我是否需要使用VBA來做到這一點,因爲我不知道了很多關於VBA - 瑪吉彌6小時前

如果Excel文件是> = 100 MB,然後打開它,然後運行VBA代碼或使用公式將需要很多時間。如果你只是關心結果然後試試:)

打開一個新的Excel文件。確保您的其他文件已關閉。在模塊中粘貼這段代碼。當你運行這個時,輸出將被粘貼在Sheet1中。

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim adodb As Object 
    Dim result 

    Set ws = Sheets("Sheet1") 

    Set adodb = CreateObject("ADODB.Connection") 

    adodb.CursorLocation = 3 

    adodb.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ 
        "C:\book1.xlsx" & ";Extended Properties=""Excel 12.0 Xml;IMEX=1" & _ 
        "HDR=NO;" & """" 

    Set result = adodb.Execute("Select F1, F2, Count(*) from [Sheet1$] Group by F1,F2") 

    With ws 
     .Range(.Cells(1, 1), .Cells(result.RecordCount, result.Fields.Count)) _ 
     = Application.Transpose(result.GetRows) 
    End With 

    '~~> Cleanup 
    result.Close 
    adodb.Close 
    Set adodb = Nothing 
    Set result = Nothing 
End Sub 

我的假設(更改上面的代碼 - 我的代碼是基於以下的假設)

1)您在使用Excel 2007/2010文件的工作。如果沒有,那麼你將不得不改變連接字符串。請參閱此鏈接以獲取適當的連接字符串。

http://connectionstrings.com/excel

2),其中有數據的Excel文件的名稱叫做​​和數據在Sheet1。此外,它駐留在C:\

快照

enter image description here

+0

但困難的是,我有幾千個數據集,它們每個都可能有不同的字符串(NMXXXXXX),我不知道如何統計它們全部 –

+1

那麼我可以建議一個數據透視表嗎? –

+0

我做到了,但數據集很大,有幾百MB的excel文件。我不知道我是否需要使用vba來做到這一點,因爲我不知道很多關於vba –