2017-07-12 71 views
1

我剛剛在過去的兩週裏開始學習VBA,所以如果這是一個基本的疏忽,我很抱歉。平均動態表的每一列Excel VBA

我試圖在動態表中找到每個列的平均值,然後將這些值(每個唯一列的平均值)填充到Sheet3中的平均值表中。我在平均範圍中找到的所有其他帖子均指特定範圍,例如(「A2:A23」),並且會導致將一列平均值的多次粘貼而不是每列的平均值粘貼一次。這是迄今爲止的代碼。任何有關它可以改進的地方的反饋非常感謝。

Sub AVERAGES() 


Set s1 = ThisWorkbook.Sheets("Sheet1") 
Set s3 = ThisWorkbook.Sheets("Sheet3") 

j = 0 

Do While s1.Range("B2").Offset(0, j).Value <> "" 

    i = 0 

    Do While s1.Range("B2").Offset(i, j).Value <> "" 

    s1.Range("B2").Offset(i, j).Select 

    i = i + 1 

    Loop 

Ave = Application.WorksheetFunction.Average(s1.Range(Cells(2, j), s1.Range(Cells(2, j).Offset(i, j)))) 

s3.Range(s3.Range("B2"), s3.Range("B2").Offset(0, j)).Value = Ave 

j = j + 1 

Loop 

End Sub 

回答

1

您可以直接在Excel中使用的公式,也可以減少你的VBA代碼這樣:

Sub AVERAGES() 
    Dim lastCol As Long 
    lastCol = ThisWorkbook.Sheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft).Column 

    With ThisWorkbook.Sheets("Sheet3").Range("B2").Resize(1, lastCol - 1) 
    .Formula = "=Average(Sheet1!B:B)" 
    .value = .value 
    End With 
End Sub 
+1

尼斯,現在是什麼時候出現呢? –

+0

'@ShaiRado哈哈,我很久以前就不再看時間了:P –

+1

謝謝@ A.S.H,那就馬上工作了。我非常感謝你的幫助。是的,我之前使用的是直接的Excel公式,但是與其他計算結合使用時,我正在爲從API中提取的大型動態數據表進行計算,結果導致工作簿崩潰。 – overflowing