엑셀365 사용자 정의 함수(UDF) 쉽게 만드는 방법

엑셀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. 사용자 정의 함수 삭제 또는 수정 방법

  1. Alt + F11 → VBA 편집기 열기
  2. 해당 모듈 선택
  3. 함수 코드 수정 또는 삭제
  4. 저장 후 엑셀로 돌아가기

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)는 반복 계산을 효율적으로 줄이고, 실무에 딱 맞는 로직을 직접 구현할 수 있는 매우 강력한 기능입니다. 수식이 복잡하거나, 반복되는 조건 처리, 텍스트 조작 등이 많다면, 오늘부터 나만의 함수를 만들어 엑셀을 더 똑똑하게 활용해보세요!