과목의 총점 평균 구하기는 엑셀을 시작하면서 늘 반복적으로 해왔던 일이었으리라...
그래서 이러한 문제는 수식을 이용해서 풀어나가는게 맞다고 본다.
같은 방 크루인 무지님의 코드이다. 수식으로 풀고 마지막에 수식을 값으로 변경하는 코드를 사용하였다.
수식으로 풀면서 좋은건 영역을 선택한 후 수식을 입력하게 되면 영역을 순환하지 않고 바로 그 영역에 수식이 들어감으로 코드가 훨씬 짧아진다.
무지님의 코드에 사용된 Sumifs 와 본인의 코드인 Application.Sumifs와의 사용을 비교하여 보길 바란다.
엑사남님은 늘 말한다. VBA에 전에 엑셀함수라고 항상 기본에 충실하자...
그래도 이건 아니지 않니???
모~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~카
타도 닥터..브레드
진짜 세상은 넓다.
더보기
Option Explicit
Dim rngAll As Range
Sub 기초방21()
Dim rngX As Range: Set rngX = [c6]
Dim rngSubtotal As Range
Dim rngA As Range
Dim i&
Application.ScreenUpdating = False
Do Until IsEmpty(rngX) '= 개인별 총점 / 평균구하기
rngX(1, 9) = Application.Sum(rngX(1, 4).Resize(1, 5))
rngX(1, 10) = Application.Average(rngX(1, 4).Resize(1, 5))
Set rngX = rngX.Offset(1)
Loop
Application.DisplayAlerts = False '= 이미 만들어진 반평균 시트 삭제
Sheets("반평균").Delete
Application.DisplayAlerts = True
Haja_Format
Set rngAll = [c5].CurrentRegion
rngAll.RemoveDuplicates Array(1, 2), 1 '= 학년 , 반 기준으로 중복 제거 / 헤드 있음
Set rngSubtotal = [e6:i14] '= 과목의 평균을 출력할 영역 설정
For Each rngA In rngSubtotal '= 과목의 평균을 구할 영역을 순환해라
With Sheets("데이터")
rngA = Format(Application.SumIfs(.Columns(rngA.Column + 1), .Columns("d"), Cells(rngA.Row, "c"), .Columns("e"), Cells(rngA.Row, "d")) _
/ Application.CountIfs(.Columns("d"), Cells(rngA.Row, "c"), .Columns("e"), Cells(rngA.Row, "d")), "#.0")
End With '= Sumifs + Countifs를 통해서 학년&반별 과목 평균을 구해라
Next rngA
Application.ScreenUpdating = True
End Sub
Function Haja_Format()
Set rngAll = [c5].CurrentRegion
With rngAll
.HorizontalAlignment = xlCenter
.Borders.LineStyle = 1
.Sort [d5], 1, [e5], , 1, [c5], 1, 1
Sheets.Add after:=Sheets("데이터") '= 반평균 시트 추가
ActiveSheet.Name = "반평균"
rngAll.Copy [c5] '= 반평균시트에 데이터시트의 전체 데이터를 복사해라
Columns("k:l").Delete: Columns("c").Delete '= 학년&반별 과목 평균을 구하기 위래 총점, 평균 / 이름 열을 삭제해라
End With
End Function
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #23 [ 제품 나열하기 ] (0) | 2023.01.31 |
---|---|
[기초방] VBA 100제 #22 [ 부서별최대값구하기 ] (0) | 2023.01.30 |
[기초방] VBA 100제 #20 [ 패턴별 색상칠하기 ] (0) | 2023.01.26 |
[기초방] VBA 100제 #19 [ 이름별 나열하기 ] (0) | 2023.01.18 |
[기초방] VBA 100제 #18 [ 이름별 카테고리 나열하기 ] (0) | 2023.01.17 |
댓글