VBA 프로그램을 하기 위해서 먼저 숙지해야 될 개념 중에 하나는 함수 만드는 방법입니다. 함수는 두 가지 종류의 Function 과 Sub 지시어를 사용해서 만듭니다. Function 과 Sub 동일하게 함수로 사용되지만 차이점이 있습니다. 결과 값을 반환하면 Function 이며, 반환하지 않으면 Sub 가 됩니다. 좀더 상세한 내용은 예제를 통해 알아 보도록 하겠습니다.
¤ Sub 프로시저 |
▼ Sub 프로시저는 VBA 에서 주로 작성하는 코드로 매크로 기록을 하게 되면 자동으로 작성되는 코드와 같습니다. 그리고 반환 값이 없으며 코드 실행 후 끝납니다. 문법은 다음과 같습니다.
Sub 함수명 (인수1, 인수2..) 소스 코드 End Sub
▼ 함수의 코드를 수행하다가 그 시점에서 바로 빠져 나올 수 있는 Return 과 Exit Sub 코드가 있습니다. 아래 그림처럼 인수로 넘어온 데이터의 유효성 체크를 해서 원하지 않는 값이 들어 왔을 때 코드를 끝까지 수행하지 않고 빠져 나가게 하는 것입니다.
Sub computeArea(ByVal length As Double, ByVal width As Double)
Dim area As Double
' 길이 값이 제대로 넘어오지 않았을 때 함수를 빠져 나간다 If length = 0 Or width = 0 Then
Exit Sub
End If
area = length * width
Debug.WriteLine(area)
End Sub
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 날짜 관련 함수, 개체 사용하는 방법 ▶ 엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 ▶ 엑셀 VBA 함수 만들어서 매크로와 연결하기 ▶ 엑셀 VBA 반환한 배열 데이터 셀에 표현하기 ▶ 엑셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하기 |
¤ Function 프로시저 |
▼ Function 은 사용자 정의 함수라고도 합니다. 그 말은 엑셀에 기본으로 추가되어 있는 함수 외에 Function 을 이용해서 사용자가 직접 추가할 수 있습니다. 문법은 Function 으로 시작해서 End Function 으로 끝납니다. 그리고 Sub 와 달리 함수명에 결과값을 넣게 되면 값을 반환 받을 수 있습니다.
Function 함수명 (인수1, 인수2..) 함수명 = 결과값 End Function
▼ 아래 샘플 소스는 함수의 인수로 숫자를 넣게 되면 제곱해서 값을 반환하게 됩니다. 그리고 Sub 처럼 반환하는 시점에 Exit Function 을 써서 함수를 빠져 나올 수 있습니다. 이것은 코드를 작성하는데 있어서 좀더 유연함을 가질 수 있습니다.
Function myDouble(ByVal a As Integer) As Double
myDouble = a * a
Exit Function
End Function
▼ VBA 편집창에 함수를 추가했다면 사용자 정의 함수에 포함되었는지 확인해 보겠습니다. 함수 마법사 팝업창을 띄운 후 범주로 [사용자 정의] 를 선택합니다.
▼ 사용자 정의 함수에 myDouble 함수가 들어가 있는 것을 확인할 수 있습니다. 이런 식으로 Function 문을 사용하면 자신이 원하는 형태의 함수를 만들어서 사용할 수가 있습니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 날짜 관련 함수, 개체 사용하는 방법 ▶ 엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 ▶ 엑셀 VBA 함수 만들어서 매크로와 연결하기 ▶ 엑셀 VBA 반환한 배열 데이터 셀에 표현하기 ▶ 엑셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 시트 더블클릭 이벤트로 셀에 배경색 변경하기 (2) | 2024.04.11 |
---|---|
엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음 (0) | 2024.04.02 |
엑셀 VBA 날짜 함수 CDate 문자열을 날짜로 변환 (0) | 2024.03.28 |
엑셀 VBA GoTo 문 이용해서 줄로 분기하기 (2) | 2024.03.23 |
엑셀 VBA 모듈(Module) 소스 파일 관리하기 (1) | 2024.03.05 |
엑셀 VBA 동일한 글자색 셀 개수 구하기 (9) | 2024.03.02 |
엑셀 VBA 이미지 셀 영역에 맞춰서 넣기, ShapeRange 함수 이용 (2) | 2024.02.28 |
엑셀 VBA 지정한 파일 삭제하기 (0) | 2024.02.17 |