[VBA] - 모듈안에 여러 프로시저(매크로), Sub, Function, Property
2026. 1. 8. 21:00ㆍRPA/VBA
1. 모듈 (Module) = "코드를 적는 종이"
엑셀 VBE 창 왼쪽 프로젝트 탐색기에 보이는 폴더나 파일 아이콘들입니다. 코드를 어디에 적을지 결정하는 장소입니다.
- 표준 모듈 (Module1, Module2...):
- 위치: [삽입] > [모듈]을 누르면 생기는 흰색 창입니다.
- 용도: 우리가 흔히 말하는 '매크로'를 기록하거나 작성하는 곳입니다. 90% 이상의 코드는 여기에 적습니다.
- 클래스 모듈 / 시트 모듈:
- 특정 시트(Sheet1)나 엑셀 자체(ThisWorkbook)에 딸려 있는 종이입니다. "이 시트가 열릴 때 실행해라" 같은 특수한 경우에 씁니다.
2. 프로시저 (Procedure) = "종이에 적힌 코드 덩어리"
모듈(종이) 안에 적혀 있는 Sub로 시작해서 End Sub로 끝나는 코드 한 묶음입니다.
- Sub (서브 프로시저): "동작 담당"
- 엑셀에서의 모습: 버튼을 만들고 우클릭해서 **[매크로 지정]**할 때 연결할 수 있는 녀석입니다.
- 하는 일: "A1 셀 지워", "폰트 빨갛게 해" 같은 명령을 수행합니다.
- 코드 모양:
-
VBA
Sub 청소하기() ' 시작 Range("A1").Clear End Sub ' 끝
- Function (펑션 프로시저): "수식 담당"
- 엑셀에서의 모습: 엑셀 셀에 =SUM() 처럼 직접 입력해서 쓰는 나만의 함수입니다.
- 하는 일: 값을 던져주면 계산해서 결과를 돌려줍니다. (매크로 목록에는 안 뜹니다.)
- 코드 모양:
-
VBA
Function 부가세계산(금액) 부가세계산 = 금액 * 0.1 ' 결과값을 함수 이름에 넣음 End Function
- Property (프로퍼티): "속성 담당" (고급)
- 엑셀에서의 모습: 일반적인 모듈에서는 거의 안 씁니다. **사용자 정의 폼(UserForm)**이나 클래스를 만들 때, 글자 크기나 색깔 같은 '설정값'을 저장하거나 꺼낼 때 씁니다. 초중급 단계에서는 몰라도 전혀 지장 없습니다.
3. 매크로 (Macro) = "실행 가능한 목록"
사용자가 엑셀에서 Alt + F8 단축키를 눌렀을 때 팝업창 리스트에 뜨는 이름들입니다.
- 중요한 차이:
- 개발자가 작성한 모든 코드는 프로시저입니다.
- 그중에서 **Public Sub (공용 서브)**로 만든 것만 매크로 목록에 뜹니다.
- Function(함수)이나 Private Sub(비공개)는 매크로 목록(Alt+F8)에 뜨지 않습니다.
🔎 한눈에 요약 (엑셀 화면 기준)
- 모듈: 코드를 적기 위해 새로 추가한 흰색 창.
- Sub: 버튼에 연결해서 실행시키는 코드 덩어리.
- Function: 엑셀 셀에 =함수명()으로 수식처럼 쓰는 코드 덩어리.
- 매크로: Alt + F8 눌렀을 때 실행하려고 뜨는 목록.
추가적으로...
엑셀 VBA에서 이 3가지를 언제 쓰는지, 실무 상황에 빗대어 명확하게 구분해 드릴게요.
1. Sub (서브) : "엑셀을 조작할 때" (가장 많이 씀)
**"버튼을 눌러서 뭔가 실행하고 싶다"**면 무조건 Sub입니다. 엑셀의 셀, 시트, 파일을 건드려서 상태를 변경할 때 씁니다.
- 언제 쓰나요?
- "매월 1일, 버튼 하나 누르면 전 지점 매출 데이터를 취합해서 보고서 시트를 만들고 싶을 때"
- "A열에 있는 데이터 중 값이 0인 행을 싹 다 지우고 싶을 때"
- "작성된 시트를 PDF로 저장해서 이메일로 보내고 싶을 때"
- 특징:
- 반환값(Return)이 없습니다. 그냥 일을 저지르고 끝납니다.
- Alt + F8 매크로 목록에 뜹니다.
2. Function (펑션) : "계산해서 값을 원할 때"
"엑셀 수식(=SUM, =VLOOKUP)으로는 도저히 해결 안 되는 복잡한 계산이 필요할 때" 씁니다. 시트를 건드리지 않고, 오직 계산 결과값만 뱉어냅니다.
- 언제 쓰나요?
- 나만의 함수 만들기: 엑셀 셀에 =MyTax(A1) 처럼 입력하면, 복잡한 세법 로직을 태워서 세액을 바로 보여주고 싶을 때.
- 복잡한 텍스트 추출: "괄호 () 안에 있는 글자만 빼내고 싶은데, MID, FIND 함수 쓰려니 수식이 너무 복잡할 때" (VBA로 정규식 함수를 만들어서 해결)
- 반복 계산: Sub 안에서 "이 날짜가 휴일인지 아닌지(True/False)"만 계속 판별해 주는 로직이 필요할 때.
- 특징:
- 반드시 결과값(Return)을 돌려줍니다.
- 엑셀 셀에 =함수명() 형태로 직접 쓸 수 있습니다.
3. Property (프로퍼티) : "나만의 도구를 만들 때" (고급)
일반적인 엑셀 업무 자동화에서는 거의 안 씁니다. **사용자 정의 폼(UserForm)**을 만들거나, 클래스 모듈을 써서 구조적인 툴을 만들 때 씁니다.
- 언제 쓰나요? (주로 클래스 모듈 사용 시)
- 데이터 검증: "직원 정보 관리 도구"를 만드는데, 직원ID에는 무조건 숫자 5자리만 들어오게 강제하고 싶을 때. (값이 들어올 때 Property Let에서 검사해서 막아버림)
- 읽기 전용 데이터: "로그인한 사용자 이름"은 프로그램 실행 중에 절대 바뀌면 안 될 때. (Property Get만 만들고 Let을 안 만들면 읽기 전용이 됨)
- 특징:
- 변수를 안전하게 관리(캡슐화)하기 위한 용도입니다.
💡 한눈에 보는 실무 요약
| 구분 | 목적 | 엑셀에서의 사용 느낌 | 비유 |
| Sub | 행동 (Action) | "야, 이거 처리해!" (버튼 클릭) | 작업반장 (시켜서 일을 처리함) |
| Function | 계산 (Calc) | "이거 값 얼마야?" (수식 입력) | 계산기 (답만 알려줌) |
| Property | 설정 (Setting) | "이 변수 조건 확인해" (내부 로직) | 금고지기 (값을 넣고 뺄 때 검사함) |
'RPA > VBA' 카테고리의 다른 글
| [매크로] - 변수, IF문, 반복문, 자동 형변환 (1) | 2026.01.08 |
|---|