2013-02-15 4 views
2

열의 평균을 계산하고 아래 값을 넣기를 원합니다.
나는 VBA에서이 코드를 작성하지만 @Tahbaza이 ActiveCell이 행의 맨 위에있는 경우를 제외하고, 그것은 단지 열의 행에서 계산됩니다, 지적 하듯이 값은 항상 0Excel vba는 열의 평균을 계산합니다.

Sub Macro4() 
' 
' Macro4 Macro 
' 
' Keyboard Shortcut: Ctrl+Shift+C 
Dim sum As Integer 
Dim count As Integer 
count = 0 
sum = 0 
Do While ActiveCell.Value <> "" 
    ActiveCell.Offset(1, 0).Activate 
    sum = sum + ActiveCell.Value 
    count = count + 1 
    Loop 
ActiveCell.Value = sum/count 
ActiveCell.Offset(0, 5).Select 
Selection.End(xlUp).Select 
Selection.End(xlUp).Select 
End Sub 
+1

매크로가 시작될 때 ActiveCell이 올바르게 설정되어 있다고 가정합니다. 범위의 꼭대기에 놓으십시오. – Tahbaza

답변

3

입니다 반환했다 활성 셀이 있습니다.

코드에서 루프의 첫 번째 반복에서 활성 셀을 계산하지 않으므로이 값이 평균값에서 누락됩니다.

다음 코드 세트에서 두 가지 문제를 해결했지만 다음 제안 사항이 없으면 다른 개선 사항 (즉, Select을 사용하지 않음)이 있습니다.

Sub Macro4() 
    ' 
    ' Macro4 Macro 
    ' 
    ' Keyboard Shortcut: Ctrl+Shift+C 
    Dim sum As Integer 
    Dim count As Integer 
    count = 0 
    sum = 0 
    Selection.End(xlUp).Select    '<---Go to the top of the range 
    Do While ActiveCell.Value <> "" 
     sum = sum + ActiveCell.Value 
     count = count + 1 
     ActiveCell.Offset(1, 0).Activate '<---Move down *after* you done the sumcount 
    Loop 
    ActiveCell.Value = sum/count 
    ActiveCell.Offset(0, 5).Select 
    Selection.End(xlUp).Select 
    Selection.End(xlUp).Select 
End Sub 

다음과 같이 한 줄의 코드로 원하는 결과를 얻을 수 있습니다. 이것은 평균화하고자하는 셀이 연속적이며 빈 셀이 없다고 가정합니다. 또한이 값은 워크 시트 의 첫 번째 행에서 시작되고 값이 두 행 이상이어야합니다 ().

편집 : 실제로 정적 값은 필요 없지만 열의 마지막 셀에서 워크 시트 함수 수식을 사용할 수 있습니다. 그 짐승의 비트지만, 그것을 분해한다면 그것은 이해가되어야합니다 :

Sub ColumnAverageFormula() 
    Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=Average(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")" 
End Sub 
+1

정말 고맙습니다. –

+1

우수. 만약 당신이 대답을 받아 들일 수 있습니다 후 무엇입니까 :) – CuberChase

관련 문제