2017-07-31 80 views
0

VBA新手。嘗試創建將填充列(D)與另一列(C)的平均值的宏。我創建了一個變量nb_rows並已開始使用此代碼:VBA中單元格的平均值

Dim myRangeC As String 
    Let myRangeC = "C4:C" & nb_rows 

    For i = 4 To nb_rows 
    Range("D" & i).Value = Application.Average(myRangeC) 
    Next i 

我得到一個錯誤。我哪裏錯了。例如,目前有nb_rows設置爲27。

+1

不要使用'Let',只要'Set myRangeC =「C4:C」&nb_rows'。你也不能將範圍設置爲一個字符串。您必須將'Dim myRangeC As Range'設爲' – dwirony

+0

@dwirony仍然產生錯誤 –

+1

錯誤是什麼? nb_rows的價值是什麼? – dwirony

回答

2

這似乎適用於我。它會在D列的每一行中放置平均值(我不確定這是否是您的意圖,但它是您的代碼當前的結構)。

Sub Test() 

     Dim nb_rows As String 
     Dim myRangeC As Range 
     Dim i As Long 

     nb_rows = 27 

     'Change Sheet1 to your sheet name 
     Set myRangeC = Worksheets("Sheet1").Range("C4:C" & nb_rows) 

     For i = 4 To nb_rows 
       Range("D" & i).Value = Application.WorksheetFunction.Average(myRangeC) 
     Next i 

End Sub 

需要注意以下幾點:

  • 使用正確的程序申報,並設置一個範圍(改變工作表Sheet1到您的工作表名稱)
  • 改變 myRangeCStringRange
  • 設置myRangeC
  • 更改Application.AverageApplication.WorksheetFuncion.Average並在範圍內傳遞(它接受一個Range對象,而不是一個字符串)

如果需要,我可以提供更多的說明。

+0

^這。或者'Set myRangeC = Application.Range(「C4:C」&nb_rows)' – dwirony

+0

同意你不需要Worksheets限定詞。你可以使用'Application.Range'或甚至只使用'Range',因爲我做了更多的事情。儘管我傾向於儘可能地限定我的對象,但我仍然可以避免意外的結果! – Soulfire