Notice
Recent Posts
Recent Comments
Link
나만의공간
📘 엑셀 고급 강의 15‑3. UDF 예외 처리 및 성능 최적화 전략 본문
📘 엑셀 고급 강의 15‑3. UDF 예외 처리 및 성능 최적화 전략
이번 소주제에서는 **User‑Defined Function(UDF)** 작성 시 예외 처리를 포함한 안정성 확보와, 멀티셀 또는 대용량 데이터 환경에서의 **성능 최적화 전략**을 다룹니다. 실무에서 자주 사용되는 UDF 함수가 안정적으로 작동하도록 설계하는 방법을 알아볼게요.
1. 예외 처리 포함 UDF 작성 예제
Function SafeCalc(a As Variant, b As Variant) As Variant
On Error GoTo ErrHandler
If Not IsNumeric(a) Or Not IsNumeric(b) Then
SafeCalc = CVErr(xlErrValue)
Else
SafeCalc = a / b
End If
Exit Function
ErrHandler:
SafeCalc = CVErr(xlErrDiv0)
End Function
- 숫자 여부 확인 → 비숫자 입력 시
#VALUE!반환 - 0으로 나누기 발생 시
#DIV/0!자동 반환
2. 계산 성능 최적화 팁
- ✅ 값 비교나 조건 판단은 가능한 VBA 내에서 처리하고, Excel 워크시트 호출은 최소화하세요.
- ✅ 루프 대신 배열 연산 사용 가능 시 **배열 처리 방식**으로 전환하면 속도 향상
- ✅ 반환할 값이 단일 범위가 아닌 배열이라면 UDF 내부 장착한 루프 구조에서 최소한의 연산으로 구성
3. 반복 호출 최소화 전략
Function BulkTier(arrSales As Range) As Variant
Dim arr() As Variant, res() As Variant
Dim i As Long
arr = arrSales.Value
ReDim res(1 To UBound(arr), 1 To 1)
For i = 1 To UBound(arr)
If IsNumeric(arr(i,1)) Then
If arr(i,1) >= 200000 Then res(i,1) = "Top"
ElseIf arr(i,1) >= 150000 Then res(i,1) = "High"
Else res(i,1) = "Std"
Else
res(i,1) = CVErr(xlErrValue)
End If
Next i
BulkTier = res
End Function
- 셀 단위 호출 대신 **범위 전체를 한 번에 처리** → 반복 호출 비용 절감
- 결과는 배열 형태로 반환되어 Excel이 스필(SPILL) 가능
4. 실무 팁 및 주의사항
- Option Explicit 선언은 기본, 변수 타입 지정도 명확히
- UDF 내 Excel 함수 호출은 WorksheetFunction보다는 내부 계산 구조 활용 권장
- 반환 배열 크기와 스필 영역 확보 확인 → #SPILL 오류 방지
- 복잡 함수는 주석 및 코드 모듈 설명 포함해 구조화된 관리 필수
5. 요약 정리
- ✅ 예외 처리 코드 포함 시 UDF 사용 중 오류 발생 시 셀 오류 대비 가능
- ✅ 대용량 데이터 처리 시 배열 방식 및 범위 단위 처리 방식이 성능에 유리
- ✅ UDF 설계 시 오류 대응, 타입 검사, 연산 최소화를 꼭 고려해야 안정적인 작동이 가능합니다
'Excel > 고급' 카테고리의 다른 글
| 📘 엑셀 고급 강의 16‑2. 시나리오 추가 및 편집 실습 (0) | 2025.08.16 |
|---|---|
| 📘 엑셀 고급 강의 16‑1. 시나리오 관리자 개요 및 기본 개념 이해 (0) | 2025.08.16 |
| 📘 엑셀 고급 강의 15‑1. 복잡 계산용 UDF 작성: 데이터 병합 및 정리 함수 구현 (1) | 2025.08.16 |
| 📘 엑셀 고급 강의 14‑4. 이벤트 기반 자동 실행 및 UDF 응용 실습 (1) | 2025.08.16 |
| 📘 엑셀 고급 강의 14‑3. 루프 및 조건문을 활용한 자동화 흐름 구성 (0) | 2025.08.16 |
Comments
