2013-06-20 152 views
1

我真的需要你的幫助,我想總結列標題的每一個外觀中不是空單元格。總結來自兩個不同表格的兩列

例如:

 |111|222|333|111|444|222|555 

aaa |2 |2 |2 |2 |2 |2 |2  
bbb | |2 |2 |2 |2 |2 |2 
ccc | | |2 | |2 |2 | 
ddd |2 | | |2 | |2 | 
eee |2 | |2 | | | |2 

我想要的結果是這樣的:

|111|222|333|444|555 
    -------------------- 
    |6 |6 |4 |3 |3 

任何想法?

+1

您的意思是計算非空單元格的數量? –

+0

是的,vba代碼很棒'這正是我需要的。 – Vera

+0

如果它適合你,你能接受答案嗎?它會幫助別人,如果他們正在尋找類似的問題 –

回答

1

This Works。您可能需要更新範圍參考。它在單獨的工作表上輸出摘要。

Sub UserNameCount() 
Dim headers As Range, header As Range, countRng As Range, col As Long 

Set dict = CreateObject("Scripting.Dictionary") 
Set headers = Range("A1:G1") 
col = 1 

For Each header In headers 
    Set countRng = Range(header.Offset(1, 0), header.Offset(5, 0)) //update the '5' depending on the number of rows you have 

    If Not dict.Exists(header.Value) Then 
     dict.Add header.Value, WorksheetFunction.CountA(countRng) 
    Else 
     dict.Item(header.Value) = dict.Item(header.Value) + WorksheetFunction.CountA(countRng) 
    End If 
Next header 

For Each v In dict.Keys 
    With Worksheets("Sheet2") 
     .Cells(1, col) = v 
     .Cells(2, col) = dict.Item(v) 
     col = col + 1 
    End With 
Next 

Set dict = Nothing 
End Sub 
2

在工作表的底部,使用COUNTA公式來計算每列中的非空白。

  |111|222|333|111|444|222|555 
------------------------------------- 
    aaa |2 |2 |2 |2 |2 |2 |2  
    bbb | |2 |2 |2 |2 |2 |2 
    ccc | | |2 | |2 |2 | 
    ddd |2 | | |2 | |2 | 
    eee |2 | |2 | | | |2 
    COUNTA |3 |2 |4 |3 |3 |4 |3 

粘貼特殊/將標題行和COUNTA行轉換爲新工作表。

Header | COUNTA 
----------------- 
    111 | 3 
    222 | 2 
    333 | 4 
    111 | 3 
    444 | 3 
    222 | 4 
    555 | 3 

現在創建一個帶有列值「Header」的數據透視表並計算COUNTA公式以獲得結果。

如果您不想使用數據透視表,請將標題值粘貼到新工作表中,刪除重複項,並使用SUMIF公式獲取每個標題值的總計。

+0

謝謝!你能幫忙用SUMIF配方嗎?我是新的.. – Vera

+0

複製標題值,刪除重複項,並使用公式= SUMIF(Range,Criteria,Sum_range)。例如,= SUMIF(Sheet1!$ A $ 2:$ A $ 8,A2,Sheet1!$ B $ 2:$ B $ 8)其中數據表位於Sheet1上。 – Tmdean