프로젝트 및 실습/VBA

[VBA] User-Defined Data Types (사용자 정의 데이터 타입)

jooona 2022. 8. 2. 20:34
반응형

C 언어에서 사용하는 구조체와 같은 형태의 Data Type을 VBA에서도 사용할 수 있습니다.

 

선언

Type Student
        name As String
        age As Integer
        grade As Integer
        is_graduated As Boolean
End Type

저는 Student라는 이름의 사용자 정의 데이터 타입을 선언해 보았습니다.

Module 내에서만 선언이 가능하며, Module의 최상단에 선언해주시면 됩니다.

 

Type 뒤에 원하는 데이터 타입 명을 입력해주고,

Type과 End Type 사이에 사용하고자 하는 데이터들을 작성해주면 됩니다. 

 

 

변수로 사용

Type Student
        name As String
        age As Integer
        grade As Integer
        is_graduated As Boolean 
End Type

Sub User_Defined_Data_Type_Ex()

    Dim student1 As Student
    
    student1.name = "Lee"
    student1.age = 27
    student1.grade = 4
    student1.is_graduated = False
    
    Debug.Print ("Name: " & student1.name)
    Debug.Print ("Age: " & student1.age)
    Debug.Print ("Grade: " & student1.grade)
    Debug.Print ("Is_Graduated: " & student1.is_graduated)
    
End Sub

 

일반적인 데이터 타입들과 마찬가지로 Dim을 이용해 데이터를 선언할 수 있습니다.

 

그리고 각각의 하위 변수들에 대해서는 '.'을 이용하여 접근할 수 있습니다.

  

 

 

 

배열로 사용

Sub User_Defined_Data_Type_Array_Ex()

    Dim studentArr(5) As Student
    
    studentArr(0).name = "Kim"
    studentArr(0).age = 24
    studentArr(0).grade = 2
    studentArr(0).is_graduated = False
    
    Debug.Print ("Name: " & studentArr(0).name)
    Debug.Print ("Age: " & studentArr(0).age)
    Debug.Print ("Grade: " & studentArr(0).grade)
    Debug.Print ("Is_Graduated: " & studentArr(0).is_graduated)
    
End Sub

일반 변수와 똑같은 방법으로 사용자 정의 데이터 타입도 배열로 사용할 수 있습니다. 

 

 

또한, 아래와 같은 방법으로 데이터 복사 역시 가능합니다.

 

Sub User_Defined_Data_Type_Array_Ex()

    Dim studentArr(5) As Student
    
    studentArr(0).name = "Kim"
    studentArr(0).age = 24
    studentArr(0).grade = 2
    studentArr(0).is_graduated = False
    
    studentArr(1) = studentArr(0)
    
    Debug.Print ("Name: " & studentArr(1).name)
    Debug.Print ("Age: " & studentArr(1).age)
    Debug.Print ("Grade: " & studentArr(1).grade)
    Debug.Print ("Is_Graduated: " & studentArr(1).is_graduated)
    
End Sub

 

 

 

반응형