AverageIF 함수를 사용하여 과목별 평균값 구하는 VBA
지식인에 올라온 문의사항을 AverageIF함수를 활용하여 평균을 구하는 VBA Code 입니다.
Option Explicit
Sub 과목별평균()
Dim rngC As Range '// Data 시트 각 셀을 넣을 변수
Dim rngData As Range '// Data 시트 전체 영역 변수
Dim avgData As Range '// Data 시트 평균을 낼 영역 변수
Dim rngT As Range '// 결과 시트 변수
Dim rngVariable As Range '// 결과 산출 변수
Dim i, j As Integer
Dim oldTime As Single '// 걸린 시간 구하는 변수 지정
oldTime = Timer '// 시간 변수 설정
Application.ScreenUpdating = False '// 화면 업데이트 (일시) 정지
Set rngData = Range(Sheets("과목별").[A2], Sheets("과목별").Cells(Rows.Count, "A").End(3))
Set avgData = Range(Sheets("과목별").[B2], Sheets("과목별").Cells(Rows.Count, "B").End(3))
Set rngT = Sheets("평균").[A2]
rngT.CurrentRegion.Offset(1).Clear '//기존 데이터 값 초기화
For Each rngC In rngData
Set rngVariable = Range(rngT, rngT.End(4))
'// COUNTIF(범위,조건) : 범위에서 조건에 맞는게 몇개인지 카운트하라
'// Averageif(조건범위, 조건, 평균범위)
If Application.CountIf(rngVariable, rngC) = 0 Then
rngT.Offset(i) = rngC
rngT.Offset(i, 1) = Application.AverageIf(rngData, rngC, avgData)
i = i + 1
End If
Next rngC
With Sheets("평균") '// 결과를 표시할 Sheet 선택
'--------------- 가운데 정렬, 선그리기 ----------------------------
.Range("A1").CurrentRegion.HorizontalAlignment = xlCenter
.Range(.[B2], .Cells(Rows.Count, "B").End(3)).NumberFormat = "#,###" '// 셀서식 : 3단위 콤마
.UsedRange.Borders.LineStyle = 1 '// 현재시트 사용영역 선그리기
.Range("A2").CurrentRegion.Sort key1:=Range("B2"), order1:=xlDescending
End With
MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 주소에서 중복부분만 제거하고 싶을 때 (0) | 2014.03.07 |
---|---|
고급필터 AdvancedFilter (0) | 2014.02.19 |
특정 전화번호만 추출하기 (3) | 2014.02.16 |
[VBA] 최대값 셀에 배경색 지정 (0) | 2014.02.12 |
AutoFilter를 이용하여 찾는 내용이 포함된 셀의 행 가져오기 VBA (1) | 2014.02.08 |