TOP

VBA-강의 6.2. 데이터 유형(Variables)

이전 강의에서는 특정 데이터를 쓸 수 있지만 하나 이상의 값을 포함할 수 없는 변수를 살펴보았습니다. 이 제한을 해결하기 위해 VBA에 여러 값을 저장할 수 있는 배열이 있습니다.


다음은 다양한 배열의 몇 가지 예입니다.

Sub variables()
    '변수 선언의 예
    Dim var1 As String
    
    '1차원 배열 선언의 예
    Dim array1(4) As String
    
    '2차원 배열 선언의 예
    Dim array2(4, 3) As String
    
    '3차원 배열 선언의 예
    Dim array3(4, 3, 2) As String
End Sub

1차원 배열

Dim array1(4) As String

1차원 배열은 하나의 열로 구성된 테이블로 생각할 수 있습니다. array1(4) 배열은 5개의 레코드를 보유할 수 있는 1차원 배열입니다. 왜 5인가? 배열의 레코드 수가 0(0, 1, 2, 3, 4)부터 시작하기 때문입니다.

이제 2차원 배열을 고려해 보겠습니다.

Dim array2(4, 3) As String

이미 5개의 행과 4개의 열이 있는 테이블처럼 보입니다.

'색깔이 있는 셀에 값 할당하기
array2(0, 0) = "적혈구의 값"
array2(4, 1) = "녹색 셀의 값"
array2(2, 3) = "파란색 셀의 값"

상수

변수와 마찬가지로 상수도 값을 저장하는 데 사용할 수 있지만 차이점은 값을 변경할 수 없다는 점입니다. 값이 반복되지 않도록 상수를 추가할 수 있습니다(예: 13.14).

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

이렇게 하면 코드를 더 쉽게 이해하고 편집할 수 있습니다. 또한 매우 간단하게 상수 값을 변경할 수 있습니다.

Sub const_example()
   '상수 선언 + 값 할당
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

변수의 범위

프로시저 시작 부분(Sub)에 변수를 선언하면 해당 프로시저에서만 사용할 수 있습니다. 프로시저가 실행된 후에는 변수 값을 더 이상 사용할 수 없습니다.

Sub procedure1()
   Dim var1 As Integer
   '=> 변수는 이 프로시저에서만 유효합니다.
End Sub

Sub procedure2()
   '=> 여기서는 var1을 사용할 수 없습니다.
End Sub

어떤 모듈 프로시저에서 변수를 사용하려면 모듈의 맨 처음 부분에서만 변수를 선언하면 됩니다. 그리고 이와 같이 변수를 선언하면 통합 문서가 닫힐 때까지 사용할 수 있습니다.

Dim var1 As Integer

Sub procedure1()
   '=> 여기서 var1을 사용할 수 있습니다.
End Sub

Sub procedure2()
   '=> var1도 여기서 사용할 수 있습니다
End Sub

책의 모든 모듈에서 동일한 변수를 사용하려면 이전 예에서 Dim을 Global로만 바꿔야 합니다.

Global var1 As Integer

변수가 나타나는 프로시저를 실행한 후 변수를 사용하려면 Dim을 Static로 바꾸십시오.

Sub procedure1()
    Static var1 As Integer
End Sub

프로시저의 모든 변수 값을 사용하려면 Sub 앞에 Static을 추가하세요.

Static Sub procedure1()
    Dim var1 As Integer
End Sub

자신만의 변수 유형 만들기

다음은 자신만의 유형을 만드는 방법에 대한 간단한 예입니다.

 '변수 유형 만들기
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    '변수 선언
    Dim cust1 As customers
   
    'cust1에 값 할당
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    '사용예
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub