2013-06-20 30 views
1

我有一個Excel文件,裏面有很多列和很多行。一列,說A有ID號碼。另一列,說G有價格。列A具有重複的ID號碼,但並非所有的號碼都重複相同的次數。有時只是一次,其他時間2,3或幾次。該行的每一列G都有唯一的價格。自動計算不同數字值的平均值

基本上,我需要平均A列給定ID的價格。如果每個ID重複相同的次數,這將是非常簡單的,但因爲他們不是我必須手動做我的平均計算爲每個分組。由於我的電子表格有許多行,這是永遠的。

下面是一個例子(H列是我目前手動計算平均值):

 A  ... G  H 
1 1234  3.00 3.50 
2 1234  4.00 
3 3456  2.25 3.98 
4 3456  4.54 
5 3456  5.15 
11 8890  0.70 0.95 
13 8890  1.20 
... 

所以在上面的例子中,平均價爲ID#1234將是3.50。同樣,ID#3456的平均價格爲3.98,#8890的平均價格爲0.95。

  • 注意行5和行11之間缺少行,行12也缺失?那是因爲他們被其他原因過濾掉了。我需要從我的計算中排除這些隱藏的行,並只計算可見行的平均值。

我試着寫一個VBA腳本,將自動計算出這一點,然後打印在列H.每個ID平均值

下面是一些代碼,我認爲:

Sub calcAvg() 
Dim rng As Range 
Set rng = Range("sheet1!A1:A200003") 
    For Each Val In rng 
     Count = 0 
     V = Val.Value '''V is set equal to the value within the range 
     If Val.Value = V Then 
      Sum = Sum + G.Value 
      V = rng.Offset(1, 0) '''go to next row 
      Count = Count + 1 
     Else 
      '''V = Val.Value '''set value in this cell equal to the value in the next cell down. 
      avg = Sum/Count 
      H = avg '''Column G gets the avg value. 
     End If 
    Next Val 

End Sub 

我知道上述代碼存在一些問題。我不太熟悉VBA。此外,這將打印平均每次在同一行。我不知道如何迭代整個行。

這似乎過於複雜。理論上它是一個簡單的問題,但缺少的行和不同數量的ID#重複使得它更加複雜。

如果這可以在Excel函數中完成,那會更好。

任何想法或建議將不勝感激。謝謝。

+0

你有沒有試過我的答案? – matzone

回答

3

如果你可以添加另一行到你的數據的頂部(把列頭放在它裏面),用公式很簡單。

公式C2

=IF(A2<>A1,AVERAGEIFS(B:B,A:A,A2),"") 

拷貝下來的所有數據行。

這適用於Excel 2007或更高版本。如果使用Excel 2003或更早版本,使用AVERAGEIF相反,調整範圍也將相應

如果您不能添加標題行,改變了第一個公式(細胞C1)到

=AVERAGEIFS(B:B,A:A,A1) 
0

在我的方式..

Sub calcAvg() 
Dim x, y, i, y2, t, Count, Mount As Integer 
Dim Seek0 As String 

x = 1 '--> means Col A 
y = 1 '--> means start - Row 1 
y2 = 7 '--> means end - Row 19 

    For i = y To y2 
     If i = y Then 
      Seek0 = Cells(i, x) 
      t = i 
      Count = Cells(i, x + 6) 
      Mount = 1    
     Else 
      If Cells(i, x) <> Seek0 Then 
       Cells(t, x + 7) = Count/Mount 
       Count = Cells(i, x + 6) 
       Mount = 1 
       t = i 
       Seek0 = Cells(i, x) 
      Else 
       Count = Count + Cells(i, x + 6) 
       Mount = Mount + 1 
      End If 
     End If 
    Next  
End Sub 

希望這有助於..