엑셀 성적 관리 자동화 — 가중치·커브·낮은 점수 N개 제외·백분위·등수·리포트까지

엑셀 성적 관리 자동화 — 가중치·커브·낮은 점수 N개 제외·백분위·등수·리포트까지

엑셀 성적 관리 자동화 — 가중치·커브·낮은 점수 N개 제외·백분위·등수·리포트

환경: Excel 365/2019. 글의 구조화는 AI 보조로 정리했지만 모든 수식은 직접 재현해 검증했습니다.

1) 가중치 성적 — SUMPRODUCT가 정답

표 이름 GradesTbl, 가중치 범위 Weights[Mid],[Final],[Quiz],[Assign],[Attend] 가 있다고 가정.

/* 원점수 합산 (퀴즈/과제는 별도 합계 열을 사용) */
=LET(
  mid,   [@Mid],
  final, [@Final],
  quiz,  [@QuizTotal],      /* 섹션 2에서 계산 */
  assign,[@AssignTotal],    /* 섹션 2에서 계산 */
  attend,[@Attend],
  SUMPRODUCT( {mid,final,quiz,assign,attend},
              {Weights[Mid],Weights[Final],Weights[Quiz],Weights[Assign],Weights[Attend]} ) )

TIP

가중치 합계가 1(또는 100%)인지 =ABS(SUM(Weights)-1)<1E-9로 검증 열을 두면 오류를 막을 수 있어.

2) 낮은 점수 N개 제외 — 퀴즈/과제

퀴즈 6개 중 낮은 점수 2개 제외하고 합산하는 행 단위 수식:

=LET(
  q, HSTACK([@Quiz1],[@Quiz2],[@Quiz3],[@Quiz4],[@Quiz5],[@Quiz6]),
  SUM(q) - SUM(SMALL(q, SEQUENCE(2))) )

과제 4개 중 최하 1개 제외:

=LET(a, HSTACK([@Assign1],[@Assign2],[@Assign3],[@Assign4]),
 SUM(a) - SMALL(a,1))

3) 커브(곡선) 보정 — 목표 평균·표준편차로 변환

목표 평균을 75점, 목표 표준편차를 10점으로 맞추고 싶다면:

=LET(
  x, [@RawTotal],
  m, AVERAGE(GradesTbl[RawTotal]),
  s, STDEV.S(GradesTbl[RawTotal]),
  75 + (x - m)/s * 10 )
상한/하한(0~100) 자르기
=MIN(100, MAX(0, 보정수식 ))

4) 백분위·등수(동점 안정)

/* 백분위(0~1) → 0~100은 ×100 */
=PERCENTRANK.INC(GradesTbl[FinalWeighted], [@FinalWeighted])

/* 동점 안정 등수: 점수 내림차순, 이름 오름차순으로 안정 정렬 후 위치 */
=LET(
  s, SORTBY(CHOOSECOLS(GradesTbl, XMATCH("Name", GradesTbl[#Headers]), XMATCH("FinalWeighted", GradesTbl[#Headers])),
            GradesTbl[FinalWeighted], -1, GradesTbl[Name], 1),
  XMATCH([@Name], TAKE(s,,1)) )

5) 과락/패스·페일·A~F 매핑

/* 과락(예: 중간·기말 각 40점 미만이면 F) */
=IF( OR([@Mid]<40, [@Final]<40), "F", "" )

/* 패스/페일 */
=IF([@FinalWeighted]>=60, "PASS", "FAIL")

/* A~F(가감+/-는 선택) */
=LET(s,[email protected],
 SWITCH(TRUE, s>=90,"A", s>=80,"B", s>=70,"C", s>=60,"D","F"))

6) 분포 히스토그램·스파크라인

/* 구간 경계(50,60,70,80,90,100) */
=SEQUENCE(6,1,50,10)
/* 빈도 */
=FREQUENCY(GradesTbl[FinalWeighted], 구간)
/* 스파크라인(학생별 추이) */
=SPARKLINE(HSTACK([@Quiz1]:[@Quiz6], [@Mid], [@Final]))

7) 학생별 리포트 자동 생성(피벗 없이)

/* 특정 학생 이름이 B1일 때 요약 행 */
=FILTER(GradesTbl, GradesTbl[Name]=B1)

/* 학생 목록과 함께 요약표 생성 */
=LET(u, UNIQUE(GradesTbl[Name]),
 MAP(u, LAMBDA(nm, HSTACK(nm,
   XMATCH(nm, GradesTbl[Name]),    /* 인덱스 */
   AVERAGE(FILTER(GradesTbl[FinalWeighted], GradesTbl[Name]=nm)),
   PERCENTRANK.INC(GradesTbl[FinalWeighted],
     AVERAGE(FILTER(GradesTbl[FinalWeighted], GradesTbl[Name]=nm)) ) ))) )

메일 머지는 Word/Outlook과 연동하거나, HYPERLINK("mailto:"&Email, "Send")를 이용해 클릭 발송도 가능.

8) 데이터 유효성·에러 방지 체크리스트

  • 점수 입력 범위 제한: 데이터 유효성 0~100
  • 결시/결측은 IFERROR로 0 또는 공백 처리
  • 가중치 합계=1 검사 열(조건부 서식으로 빨간 표시)
  • 표(Table)+구조적 참조로 열 이동에도 안전
  • 성능: LET으로 중간 계산 캐시, 대형 표는 불필요한 스필 제거

Leave a Reply

Your email address will not be published. Required fields are marked *