'AverageIF 함수'에 해당되는 글 1건

728x90

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




AverageIF_VBA.vbs



과목별평균.xlsm


블로그 이미지

Link2Me

,