어떻게 VBA에서 구조를 사용하는 방법? 이용자는 데이터 유형을 정의
학교 관리 시스템을 만들려고한다고 가정 해 보겠습니다. 여기에는 학생 이름, 학생 롤 번호, 클래스 등과 같은 다양한 유형의 변수가 있습니다. 학교에도 교사가 있으므로 교사 이름, 교사 과목, 클래스 등이 있습니다. 마찬가지로, 다음과 같은 많은 다른 개체가 있습니다. , 사서, 수업, 원칙 등. 이제 학교의 각 개체마다 다른 변수를 갖는 것은 지저분해질 것입니다. 관련 값을 저장하는 학생, 교사, 수업 등의 데이터 유형을 만드는 것은 어떻습니까? 이를 위해 정의 된 VBA 데이터 유형을 사용할 수 있습니다.
이 기사에서는 VBA에서 고유 한 데이터 유형을 만드는 방법에 대해 알아 봅니다. 이를 VBA의 UDT라고합니다. === 사용자 정의 데이터 유형 정의 VBA에서 구조 또는 UDT를 정의하기 위해 Type___End Type 블록을 사용합니다.
다음은 UDT의 구문입니다.
Type Tname_Of_Data_Type var1 as datatype 'datatype can be anything, int, array,or even UDT var2 as datatype Var3() as datatype --- VarN() as datatype End Type
따라서 VBA에서 사용자 지정 데이터 유형을 정의하려면 Type Keyword로 시작합니다. 그런 다음 사용자 지정 데이터 유형의 이름을 작성합니다. `link : / excel-macros-and-vba-how-to-use-vba-collections-in-excel [vba collections]`와 UDT를 구별 할 수 있도록 데이터 유형 이름 앞에 T를 사용하는 것이 관례입니다. . DataType은 무엇이든 될 수 있습니다. 그리고 Integer, String, Variant, 다른 UDT, Arrays, 컬렉션, 무엇이든.
프로그램에서 UDT를 사용하려면 다른 변수와 마찬가지로 해당 변수를 선언하십시오.
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type End Sub
단순한. 이제이 UDT 내에서 변수를 사용하기 위해 도트 연산자를 사용합니다.
데이터 유형 이름 뒤에 점과 변수 이름을 사용합니다.
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type myVar1.var1="Abcd" myVar2.Var2="xyvz" End Sub
이론이 충분하면 어떻게 작동하는지보기 위해 예제를 살펴 보겠습니다.
학생과 관련된 정보를 저장하는 학생 변수 생성 그래서 학생과 관련된 정보를 저장하는 사용자 정의 데이터 유형을 생성하는 작업이 있습니다.
학생은 이름, 성, 롤 번호, 생년월일, 수업, 섹션, 과목이 있습니다.
그럼 만들어 봅시다.
'Created a Public Student Data Type Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Use this Tstudent type in subroutine Sub StudentsInfo() 'Creating and initializing student type variable Dim student1 As Tstudent student1.fName = "Manish" student1.lName = "Singh" student1.rNo = 12334 student1.clss = 10 student1.section = "A" ReDim student1.subjects(2) student1.subjects(0) = "physics" student1.subjects(1) = "Math" 'Printing student details. Debug.Print (student1.fName) Debug.Print (student1.lName) Debug.Print (student1.rNo) Debug.Print (student1.clss) Debug.Print (student1.section) Debug.Print (student1.subjects(0)) Debug.Print (student1.subjects(1)) End Sub
위의 sub를 실행하면 아래와 같이 결과가 출력됩니다.
Manish Singh 12334 10 A physics Math |
UDT 배열 생성 및 요소 액세스
마찬가지로 Tstudent 유형의 변수를 필요한만큼 만들 수 있습니다.
다른 데이터 유형과 마찬가지로 Tstudent 유형의 배열을 만들 수도 있습니다.
Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Creating an arrays of Tstudents type Sub SchoolInfo() Dim schoolName As String Dim students() As Tstudent schoolName = "Senior School" ReDim students(10) For i = 0 To 9 students(i).fName = "name" & Str(i + 1) students(i).rNo = i + 1 Next i Debug.Print ("Name : Roll No") For i = 0 To 9 Debug.Print (students(i).fName & " : " & students(i).rNo) Next i End Sub
이 코드를 실행하면 바로 실행되는 창에 인쇄됩니다.
Name : Roll No name 1 : 1 name 2 : 2 name 3 : 3 name 4 : 4 name 5 : 5 name 6 : 6 name 7 : 7 name 8 : 8 name 9 : 9 name 10 : 10 |
위의 코드에서 처음 정의 된 UDT 구조는 이전과 하위입니다 (이유는 나중에 설명하겠습니다). 방금 VBA의 모든 변수에 대해하는 것처럼 dim 키워드를 사용하여 배열을 만들었습니다. 그런 다음 Redim을 사용하여 배열의 크기를 정의했습니다. 이후에 배열을 초기화하기 위해 for 루프를 사용합니다.
구조의 요소에 액세스하기 위해 다른 for 루프를 사용합니다. 그게 다입니다.
모듈 위에 UDT를 선언 한 이유는 무엇입니까?
서브 루틴 또는 함수 외부의 모듈에서 UDT를 먼저 선언하면 통합 문서의 모든 모듈에서 사용할 수 있습니다. 즉, 모듈에 100 개의 하위 및 함수가 있으면 모두 본문에 Student 유형 변수를 선언 할 수 있습니다. UDT가 개인용이 아니면 통합 문서의 모든 모듈에서 사용할 수 있습니다. 포함하는 모듈에서만 구조 (UDT)를 사용할 수 있도록하려면 private으로 선언하십시오.
Private Type Tstudent fName As String lName As String rNo As Integer clss As Integer section As String subjects() As String End Type
절차 수준에서 UDT를 사용할 수 없습니다. 이는 서브 루틴이나 함수 내에서 사용자 정의 데이터 유형을 정의 할 수 없음을 의미합니다.
중첩 된 사용자 정의 유형 자동차라는 UDT가 있다고 가정 해 보겠습니다. 자동차에는 자체 요소가 있습니다. 마찬가지로 고유 한 속성을 가질 수있는 자전거라는 UDT가 있습니다.
이제 차량이라는 데이터 유형이 필요하다고 가정 해 보겠습니다. 차량은 자동차와 자전거를 요소로 가질 수 있습니다. 우리가 할 수 있습니까? 네, 할 수 있습니다. 아래 코드를 참조하세요
Private Type Tcar seats As Integer ac As Boolean typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tbike seats As Integer typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tvehicle number_of_Vehicle As Integer bike As Tbike car As Tcar End Type Sub vehicleVarification() Dim myVehicles As Tvehicle myVehicles.number_of_Vehicle = 2 myVehicles.bike.seats = 1 myVehicles.bike.typ = "Racing" myVehicles.car.seats = "4" myVehicles.car.ac = True Debug.Print myVehicles.number_of_Vehicle Debug.Print myVehicles.bike.typ Debug.Print myVehicles.car.ac End Sub
여기에서는 세 가지 사용자 정의 데이터 유형을 정의했습니다. 첫 번째는 자동차와 관련된 정보를 담고있는 Tcar입니다. 두 번째는 자전거이며 자전거에 대한 정보도 포함합니다.
세 번째 UDT는 Tvehicle입니다. 그것은 차량 수를 저장하는 하나의 변수와 Tcar 및 Tbike 유형의 두 변수를 포함합니다.
개인용 Tvehicle
number_of_Vehicle As Integer
Tbike로 자전거
car As Tcar
끝 유형
Tcar 및 Tbike의 변수에 액세스하기 위해 Tvehicle 데이터 유형을 사용할 수 있습니다. 서브에서 우리는 myVehicles로 Tvehicle 유형의 변수를 하나만 정의했습니다. 이 변수를 만들면 VBA는 Tcar와 Tbike의 변수도 만듭니다.
Tcar와 Tcar의 변수를 초기화하고 접근하기 위해 myVehicle 변수를 사용할 수 있습니다. 코드에서 볼 수 있듯이.
myVehicles.number_of_Vehicle = 2
myVehicles.bike.seats = 1
myVehicles.bike.typ = “레이싱”
myVehicles.car.seats = “4”
myVehicles.car.ac = 참
서브를 실행하면 결과가 발생합니다.
이 기능은 실제로 VBA 프로그래밍의 힘을 기하 급수적으로 증가시킵니다. 실제 엔티티와 같이 데이터 유형을 구조화 할 수 있습니다. 큰 프로젝트에서 유용 할 수있는 데이터 유형 간의 관계를 만들 수 있습니다.
예, 이것이 VBA에서 사용자 정의 데이터 유형 또는 구조를 만들고 사용할 수있는 방법입니다. 설명 할 수 있었으면 좋겠다. 이 기사 또는 기타 VBA 관련 질문에 대한 질문이 있으면 아래의 의견 섹션에서 저에게 질문하십시오. 여러분의 의견을 듣고 정말 기쁩니다.
관련 기사 :
link : / general-topics-in-vba-vba-variables-in-excel [Excel의 VBA 변수]
| * VBA는 Visual Basic for Applications를 나타냅니다.
Microsoft의 프로그래밍 언어입니다. MSExcel, MS-Word 및 MS-Access와 같은 Microsoft Office 응용 프로그램에서 사용되는 반면 VBA 변수는 특정 키워드입니다.
link : / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| * 모든 프로그래밍 언어에는 정의 된 변수에 액세스 할 수있는 위치를 정의하는 변수 액세스 지정자가 있습니다. Excel VBA도 예외는 아닙니다. VBA에도 범위 지정자가 있습니다.
link : / cells-ranges-rows-and-columns-in-vba-byref-and-byval-arguments-vba-interview-question [ByRef 및 ByVal 인수]
| 인수가 ByRef 인수로 다른 하위 또는 함수에 전달되면 실제 변수의 참조가 전송됩니다. 변수 복사본에 대한 변경 사항은 원래 인수에 반영됩니다.
link : / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Microsoft Excel에서 VBA를 사용하여 확인 메시지없이 시트 삭제]
| VBA를 사용하여 시트를 삭제하고 있으므로 수행중인 작업을 알고 있습니다.
이 경고를 표시하지 않고 망할 시트를 삭제하도록 Excel에 지시하고 싶습니다.
link : / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 새 통합 문서 추가 및 저장]
| 이 코드에서는 먼저 통합 문서 개체에 대한 참조를 만들었습니다. 그런 다음 새 통합 문서 개체로 초기화했습니다. 이 접근 방식의 이점은이 새 통합 문서에서 작업을 쉽게 수행 할 수 있다는 것입니다. 저장, 닫기, 삭제 등`link : / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [메시지 표시 켜기 Excel VBA 상태 표시 줄 *]`| Excel의 상태 표시 줄은 코드 모니터로 사용할 수 있습니다. VBA 코드가 길고 VBA를 사용하여 여러 작업을 수행하는 경우 화면 깜박임이 표시되지 않도록 화면 업데이트를 비활성화하는 경우가 많습니다.
link : / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 경고 메시지 끄기]
| *이 코드는 VBA를 비활성화 할뿐만 아니라 경고뿐만 아니라 코드의 시간 효율성도 증가시킵니다. 방법을 봅시다.
인기 기사 :
link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 개의 Excel 단축키로 생산성 향상]
| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 더 빠르게 작업 할 수 있습니다.
link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]
| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]
| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.
Countif 기능은 대시 보드를 준비하는 데 필수적입니다.
link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]
| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.