엑셀 VBA 절차적 프로그래밍 – 함수와 루틴 선언 및 호출
엑셀 VBA는 기본적으로 절차적(Procedural) 프로그래밍을 기반으로 동작합니다. 절차적 프로그래밍에서는 프로그램을 순차적으로 실행하며, 특정 기능을 수행하는 **함수(Function) 및 루틴(Sub)**을 사용하여 코드의 재사용성과 가독성을 높일 수 있습니다.
1. 함수(Function)와 루틴(Sub)의 차이점
VBA에서 특정 작업을 수행하기 위해 두 가지 유형의 프로시저(절차)를 사용할 수 있습니다.
유형 선언 방식 반환 값 호출 방식
Sub(서브 루틴) | Sub 이름() | 없음 (단순 실행) | Call 또는 직접 호출 |
Function(함수) | Function 이름() As 데이터형 | 있음 | 값 반환 후 사용 |
2. Sub 프로시저(서브 루틴)
**서브 루틴(Sub)**은 특정 작업을 수행하지만 값을 반환하지 않습니다. 버튼 클릭, 이벤트 처리 등에서 주로 사용됩니다.
(1) Sub 프로시저 선언
Sub HelloWorld()
MsgBox "안녕하세요, VBA입니다!"
End Sub
- MsgBox는 메시지 박스를 띄우는 기본 제공 함수입니다.
- HelloWorld는 호출되면 메시지 창을 띄우지만, 값은 반환하지 않습니다.
(2) Sub 프로시저 호출 방법
1) 직접 호출
HelloWorld
2) Call 키워드 사용
Call HelloWorld
- Call 키워드는 선택 사항이며, 사용해도 되고 안 해도 됩니다.
3) 매개변수가 있는 Sub 호출
Sub GreetUser(name As String)
MsgBox "안녕하세요, " & name & "님!"
End Sub
호출 예시:
GreetUser "홍길동"
3. Function 프로시저(함수)
Function 프로시저는 값을 반환하는 기능을 하며, Function 키워드를 사용하여 선언합니다.
(1) Function 프로시저 선언
Function AddNumbers(a As Integer, b As Integer) As Integer
AddNumbers = a + b
End Function
- 두 개의 정수 a와 b를 더한 후 그 값을 반환합니다.
- 함수의 반환 값은 AddNumbers = 값과 같은 형태로 지정합니다.
(2) Function 호출 방법
1) 셀에서 직접 호출
- VBA에서 작성한 함수는 Excel 셀에서 일반 함수처럼 사용 가능함.
=AddNumbers(10, 20)
2) VBA 코드에서 호출
Sub TestFunction()
Dim result As Integer
result = AddNumbers(5, 7)
MsgBox "결과 값: " & result
End Sub
- result = AddNumbers(5, 7) → 함수 호출 후 결과를 변수에 저장.
- MsgBox를 통해 결과 값 표시.
4. ByRef와 ByVal – 매개변수 전달 방식
VBA에서는 매개변수를 ByRef(참조 전달) 또는 ByVal(값 전달) 방식으로 전달할 수 있습니다.
전달 방식 설명
ByVal(값 전달) | 함수 내에서 값을 변경해도 원본 변수는 유지됨 (기본값) |
ByRef(참조 전달) | 함수 내에서 값을 변경하면 원본 변수도 변경됨 |
(1) ByVal 예제 (기본값)
Sub ChangeValue(ByVal num As Integer)
num = num * 2
End Sub
Sub TestByVal()
Dim x As Integer
x = 10
Call ChangeValue(x)
MsgBox "x 값: " & x ' 여전히 10 (변경되지 않음)
End Sub
(2) ByRef 예제 (원본 변경)
Sub ChangeValueByRef(ByRef num As Integer)
num = num * 2
End Sub
Sub TestByRef()
Dim x As Integer
x = 10
Call ChangeValueByRef(x)
MsgBox "x 값: " & x ' 값이 20으로 변경됨
End Sub
- ByRef를 사용하면 x의 값이 함수 실행 후 변경됨.
5. VBA에서 Function과 Sub의 활용 예제
(1) 두 수를 입력받아 합을 구하는 함수와 호출하는 Sub
Function SumNumbers(a As Integer, b As Integer) As Integer
SumNumbers = a + b
End Function
Sub CalculateSum()
Dim num1 As Integer, num2 As Integer
Dim result As Integer
num1 = 10
num2 = 20
result = SumNumbers(num1, num2)
MsgBox "두 수의 합: " & result
End Sub
(2) 특정 범위의 셀 값을 합산하는 함수
Function SumRange(rng As Range) As Double
Dim cell As Range
Dim total As Double
total = 0
For Each cell In rng
total = total + cell.Value
Next cell
SumRange = total
End Function
엑셀 셀에서 호출 가능:
=SumRange(A1:A10)
6. 결론
- Sub 프로시저는 특정 작업을 실행하지만 값을 반환하지 않음.
- Function 프로시저는 값을 반환하며, 엑셀 셀에서도 직접 호출 가능.
- 매개변수 전달 방식은 기본적으로 ByVal이며, ByRef를 사용하면 원본 변수 값이 변경될 수 있음.
- VBA의 절차적 프로그래밍을 활용하면 반복 작업을 효율적으로 자동화할 수 있음.
'Excel을 활용한 알고리즘 개발' 카테고리의 다른 글
[Excel을 활용한 알고리즘 개발] 피벗 테이블(Pivot Table) 활용 방법 (1) | 2025.03.21 |
---|---|
[Excel을 활용한 알고리즘 개발] 워크시트, 표, 차트, 셀 접근 및 객체 변수 생성 (0) | 2025.03.21 |
[Excel을 활용한 알고리즘 개발] VBA Script 특징 및 개요 2 (0) | 2025.03.21 |
[Excel을 활용한 알고리즘 개발] 엑셀 스키마 기반 데이터 검증 스크립트 (1) | 2025.02.09 |
[Excel을 활용한 알고리즘 개발] 엑셀 히스토리 테이블 데이터 시트 (0) | 2025.02.09 |