엑셀365에는 수백 개의 기본 내장 함수가 있지만, 실무에서는 내장 함수만으로 부족한 상황이 종종 발생합니다. 이럴 땐 VBA를 활용해 ‘사용자 정의 함수(UDF, User Defined Function)’를 만들어 직접 해결할 수 있습니다.
UDF는 엑셀 함수처럼 셀에 입력하여 사용할 수 있으며, 복잡한 계산이나 반복되는 로직을 간단하게 처리해줍니다. 이 포스팅에서는 UDF의 개념부터 작성, 실무 예제, 고급 활용 팁까지 쉽게 정리해드릴게요.
1. 사용자 정의 함수(UDF)란?
**UDF(User Defined Function)**는 사용자가 직접 만든 엑셀 함수입니다.
기존 함수와 동일하게 셀에 =함수이름()
형태로 입력하며,
복잡한 계산 로직을 짧고 간결한 함수로 재사용할 수 있도록 도와줍니다.
항목 | 내용 |
---|---|
작성 위치 | VBA 편집기(Module) |
실행 방식 | 셀에 함수처럼 입력 |
장점 | 반복 로직 단순화, 가독성 향상, 유지보수 용이 |
단점 | 매크로 보안 설정 필요, 다른 사용자와 공유 시 주의 필요 |
2. UDF 만들기 기본 과정
① 개발 도구 활성화
파일 > 옵션 > 리본 사용자 지정 > 개발 도구
체크
② VBA 편집기 열기
개발 도구 > Visual Basic
또는 단축키Alt + F11
③ 모듈 삽입
삽입 > 모듈
클릭
④ 함수 작성
예시:
Function 제곱(x As Double) As Double
제곱 = x * x
End Function
엑셀 셀에 입력:
=제곱(5) → 결과: 25
3. 실무 예제별 사용자 정의 함수
예제 1: 세금 포함 가격 계산 함수
Function 세금포함가격(금액 As Double, 세율 As Double) As Double
세금포함가격 = 금액 * (1 + 세율)
End Function
=세금포함가격(100000, 0.1) → 결과: 110000
예제 2: 한글 이름 성과 이름 분리
Function 이름분리(이름 As String, 구분 As String) As String
If 구분 = "성" Then
이름분리 = Left(이름, 1)
ElseIf 구분 = "이름" Then
이름분리 = Mid(이름, 2)
Else
이름분리 = ""
End If
End Function
=이름분리("홍길동", "성") → "홍"
=이름분리("홍길동", "이름") → "길동"
예제 3: 이메일 아이디 추출 함수
Function 이메일ID(주소 As String) As String
이메일ID = Left(주소, InStr(1, 주소, "@") - 1)
End Function
=이메일ID("kim@company.com") → "kim"
4. UDF 사용 시 주의사항
주의점 | 설명 |
---|---|
파일 저장 형식 | 반드시 .xlsm 형식으로 저장해야 VBA 포함됨 |
자동 계산 | UDF는 외부 함수보다 느릴 수 있으니 가급적 간결하게 |
다른 PC에서 사용 | 매크로 보안 설정이 열려 있어야 작동 가능 |
디버깅 | F8로 단계별 실행 가능, MsgBox , Debug.Print 로 중간값 확인 가능 |
5. 고급 활용: 다중 인수 처리
Function 평균값(ParamArray nums() As Variant) As Double
Dim i As Long, 합계 As Double
For i = LBound(nums) To UBound(nums)
합계 = 합계 + nums(i)
Next i
평균값 = 합계 / (UBound(nums) - LBound(nums) + 1)
End Function
=평균값(10, 20, 30, 40) → 25
설명: ParamArray를 사용하면 함수에 가변 개수 인수 전달 가능
6. 사용자 정의 함수 삭제 또는 수정 방법
Alt + F11
→ VBA 편집기 열기- 해당 모듈 선택
- 함수 코드 수정 또는 삭제
- 저장 후 엑셀로 돌아가기
Q&A
Q. 함수가 작동하지 않아요. 이유가 뭔가요?
- 파일 확장자가
.xlsm
인지 확인 - 함수 이름에 한글을 썼을 경우 영문보다 안정적
- 셀에 직접 수식 입력 시
=
로 시작했는지 확인 - 매크로 보안 설정 확인:
파일 > 옵션 > 보안 센터 > 설정
Q. UDF에서 다른 셀을 참조할 수 있나요?
가능하지만, 셀 수정을 UDF 내에서 수행하는 건 제한됩니다.
UDF는 “결과만 반환”하는 함수이기 때문입니다.
Function 셀합(A As Range, B As Range) As Double
셀합 = A.Value + B.Value
End Function
→ =셀합(A1, B1)
로 사용 가능
Q. 다른 사용자와 UDF를 공유하려면?
- 파일을
.xlsm
으로 저장해서 공유 - UDF를 ‘추가 기능(Add-In)’으로 만들어 배포할 수도 있음
공유 시 주의: 상대방 PC에서도 매크로 활성화 상태여야 사용 가능
엑셀365의 사용자 정의 함수(UDF)는 반복 계산을 효율적으로 줄이고, 실무에 딱 맞는 로직을 직접 구현할 수 있는 매우 강력한 기능입니다. 수식이 복잡하거나, 반복되는 조건 처리, 텍스트 조작 등이 많다면, 오늘부터 나만의 함수를 만들어 엑셀을 더 똑똑하게 활용해보세요!