세진세상

VBA 프로시저(Sub, Function), 변수선언(Dim, Redim) 본문

VBA

VBA 프로시저(Sub, Function), 변수선언(Dim, Redim)

세진세상 2018. 1. 15. 18:33

Excel VBA 프로시저, 변수선언


VBA에는 두가지 프로시저가 있다.

Sub 프로시저와 Function 프로시저다.

두 프로시저 모두 입력된 코드를 실행하는 역할이지만,

일반적으로 Sub는 수행, Function은 값 리턴이라는 차이가 있다고 한다.

뭔 소리인가 싶으니, 직접 해보도록 하자.


Hello라는 문구를 출력하는 Sub 프로시저를 만들어보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
Sub proc_ex1()
    
    ' Sub 프로시저 : 특정 동작 실행
        'Sub 프로시저이름(매개변수)
             '코드
        'End Sub
           
    '팝업 창으로 출력
        'MsgBox(출력값)
    
    MsgBox ("hello")
            
End Sub
cs


코드 입력이 끝났다면, 실행해보자.

실행 방법은 두 가지를 소개하겠다.


하나는 VBA 창에서 상단 메뉴의 재생 버튼 (단축키 F5)



다른 하나는 엑셀 창에서 상단 메뉴의 개발 도구 탭 > 매크로 (단축키 Alt + F8) > 프로시저 선택 > 실행



실행하여 다음과 같은 팝업 창이 생성되면 정상이다.



그럼 이제 동일한 기능의 Function 프로시저를 만들어보자.


1
2
3
4
5
6
7
8
9
10
11
Function proc_ex2()
    
    'Function 프록시저 : 사용자 지정 함수
        'Function 프로시저이름(매개변수 As 타입)
            '코드
            '프로시저이름 = 리턴값
        'End Function
        
    MsgBox ("hello")
        
End Function
cs


조금 다른 구조를 가지고 있지만, 다 생략하고 Hello 출력만 해보자.

아무 반응이 없다...엑셀 창에 가서 매크로에도 프로시저 이름이 없다.


Function 프로시저는 말 그대로 함수를 정의하는 프로시저로, 사용자의 임의 함수를 생성하는 듯 보인다.

그래서 엑셀의 셀에 =프로시저이름 을 입력하면, 코딩한 프로시저를 사용할 수 있다.



실행하면 동일한 결과를 얻게 되는데, 다만



팝업 창을 닫으면 0값이 리턴된다.

코드 내에 특별한 리턴 값을 지정하지 않은 결과인 것 같다.



그렇다면, Function 프로시저의 값 리턴 기능을 확인해보자.


1
2
3
4
5
6
7
Function proc_ex3(x As Integer, n As Integer)
    
    '두 매개변수를 입력받아 제곱근을 계산하는 함수 생성
    
    proc_ex3 = x ^ (1 / n)
 
End Function
cs


위 프로시저를 사용해보자.



8의 3제곱근인 2가 잘 출력된다.


위 코드에 Integer는 변수의 타입인데, 잠시 변수의 종류를 간략히 알아보고 넘어가자.



대략 이렇다고 한다;;


변수의 종류도 알아봤으니, 변수를 선언하는 방법에 대해 알아보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub variable_ex1()
    
    'Dim 변수이름 As 데이터타입
    
    Dim x As Integer
    Dim n As Integer
    
    x = 8
    n = 3
    
    y = x ^ (1 / n)
    
    MsgBox (y)
 
End Sub
cs


제곱근을 구하는 프로시저이고, 결과로 2가 나오면 정상이다.


하나의 값을 변수 외에도 배열과 같은 변수를 지정할 수 있는데, 배열을 잠깐 맛을 보겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub array_ex1()
    
    'Dim 배열이름(배열크기) As 데이터타입
    Dim arr1(2As Integer
    
    'Dim arr1(0 To 2) As Integer
    
    'Dim arr1() As Integer
    'ReDim arr1(2) 배열크기 재지정
    
    Dim temp As Integer
    Dim capacity As Long
       
    arr1(0= 4
    arr1(1= 5
    arr1(2= 6
    
    temp = arr1(0+ arr1(2)
    
    '배열 크기 구하기
    'UBound 배열의 가장 높은 번호
    'LBound 배열의 가장 낮은 번호
    capacity = UBound(arr1) - LBound(arr1) + 1
    
    '직접 실행 창에 출력
    'Debug.Print 출력값; 출력값
    Debug.Print temp; capacity
    
End Sub
cs


배열 크기를 설정하는 방법은 세 가지를 소개하겠다.

1. Dim 배열이름(배열 크기) : 변수 선언부터 크기 지정, 시작 번호 0

2. Dim 배열이름(시작번호 to 끝번호) : 변수 선언부터 크기 지정, 시작 번호 임의 설정

3. Dim 배열이름() : 변수 선언 시 지정하지 않고, 이후에 지정

   ReDim 배열이름(배열크기)


위와 같이 설정할 경우 arr1이라는 배열 변수에 (4, 5, 6) 값이 들어가게 된다.

0번 주소에 4, 1번 주소에 5, 2번 주소에 6이 들어간 셈이다.

만약 1 to 3으로 만들었다면 1번 부터 3번 주소를 갖는다고 보면 된다.


코드 마지막에 직접 실행 창에 출력이 있는데,

기존에 쓰던 MsgBox의 팝업은 귀찮고, 출력 값은 확인해야 할 때 유용하다.

하지만 불편하게도 창을 열어줘야 한다;;


VBA창 상단 메뉴 보기 > 직접 실행 창(단축키 Ctrl + G)


'VBA' 카테고리의 다른 글

VBA 반복문 #2(Do While, Do Until)  (0) 2018.02.05
VBA 반복문 #1(For Next, For Each Next)  (0) 2018.01.31
VBA 조건문(If, Select Case)  (0) 2018.01.29
VBA 연산자(산술, 비교, 논리)  (0) 2018.01.28
VBA 시작하기  (0) 2018.01.09
Comments