Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Excel & VBA---Brain Training


Class Module|

컴퓨터프로그래밍이란 정보를 다루는 일이다
그러니, 정보를 너절하게 널어 놓고 관리할지, 체계적으로 정리하여 놓고
관리하여야 할 지가 문제중의 문제인 것이다
그런 문제중에서 가장 발전된 단계가 사용자정의 개체의 활용인 것이다
사용자정의 개체(User Defined Object)를 만들어서 사용하는 것은 흥미로운 일이다
관련된 여러개의 타입이 같은 정보를 하나로 만드는 것은 배열이라는 것이 있고
정보가 구조적인 관계를 구성하고 있고,타입은 같던 다르던
사용자정의 변수(User Defined Variable)를 아래와 같이
만들어서 사용하였지만..
사용자정의 개체가 나오면서 부터는 사용자정의 변수를 쓰느니
그냥 사용자정의 개체를 만들어서 사용하기도 한다
물론 오래된 API함수와 정보를 주고 받을때는 API가 요구하는 형식이
어떤 구조적 형식을 요구하고 있어서 Type 사용자정의변수를 만들어서 사용한다
사용자정의변수를 만들때는 Type ~ End Type으로 하여
Type Structure라고도 하고 아래와 같이 만들어서 사용한다
만들어서 사용한 것이다

Type myPoint
   iX As Integer
   iY As Integer
End Type

정보와 정보가 관련된 구조(Structure)를 이루고 있는 것이다
예를 들어서 어떤 Point는 X좌표값과 Y좌표값을 짝으로 이루고 있다
X와 Y가 같이 있어야 정보로서 가치를 갖고 있는 셈이다
이런 것은 두개의 정보가 하나의 정보로서 구성이 된 셈이다
또 예를 들어서 테이블은 여러개의 행으로 구성이 되고
하나의 행은 [이름],[주소],[직업]이라는 3개의 정보를 갖고 있다
그러니 하나의 행은 위의 3개의 정보가 구조적으로 관계를 갖고 만들어진 셈이다
그러니 이것도 Type변수의 대상이 되는 셈이다

Type EachRow
   이름 As String
   주소 As String
   직업 As String
End Type

Class모듈을 이야기 하면서 왠 Type 변수이야기를 하나??
Class모듈은 Type변수,사용자정의 변수보다 좀더 발전된 개념이라서
Type변수를 이야기하는 것..!!

그냥 간단히 Type변수의 확장된 발전된 정보의 관리방식을 활용한다고
생각하시면 좋을 것이
개체라고 하면 속성이라는 단어가 가장 먼저 떠오를 것이다
왜 속성이 필요한가요..
그냥 함수로 정보를 얻어내거나 작성해도 되지 않나요?
의문을 많이 갖게 되기도 한다
그러나 가장 간단명료한 정보의 형태는

A=34
B=12
C=99

와 같이 어떤 것이 얼마다!라는 쌍(Pairing)을 이루는 것이 가장 간단명료한 것이다
속성은 이렇게 하나의 이름에 하나의 정보를 주고 받는다

예를 들면 같은 구조를 갖고 있는 테이블을 시트마다 그린다고 할때
크래스모듈을 사용하지 않는다면 아래와 같이 작업을
할 수 있을 것이다

Sub makeTable() makeTable_ "table_1",10,Array("A","B","C","D","E"),6,True,False makeTable_ "table_2",15,Array("AB","BC","CD","DE","EF"),36,False,False makeTable_ "table_3",17,Array("가","나","다","라","마"),15,True,False makeTable_ "table_4",5,Array("A_1","B_2","C_3"),6,True,False makeTable_ "table_4",7,Array("서울", "인천", "수원"),15,False,True End Sub Sub makeTable_(sShtName As String, _ iRow As Integer, _ sFld As Variant, _ iHeadBackColor As Integer, _ bHeadFontBold As Boolean, _ bGrid As Boolean) On Error Resume Next Application.DisplayAlerts = False Worksheets(sShtName).Delete Application.DisplayAlerts = True Dim iCol As Integer iCol = UBound(sFld) + 1 With Worksheets.Add .Name = sShtName .Range("A1").Resize(, iCol) = sFld With .Range("A1").Resize(iRow, iCol) .BorderAround xlSolid With .Rows(1) .Interior.ColorIndex = iHeadBackColor .Font.Bold = bHeadFontBold End With .Borders(xlInsideVertical).LineStyle = xlSolid .Borders(xlInsideHorizontal).LineStyle = xlSolid .Offset(1).Resize(.Rows.Count - 1) = "=int(RAND()*100)+100" End With ActiveWindow.DisplayGridlines = bGrid End With End Sub

위의 경우 프로시져에 매개변수를 주욱 전달하여 테이블을 표현한다
크래스모듈을 활용하여
테이블을 만드는 개체를 만들고
각각의 매개변수를 속성으로 바꾸어서 표현해 보시기 바란다
어느 것이 편리한지, 편리한것을 사용하면 되는 것이다


BrainTraining_ClassModule_1.



화일의 일반적인 방법과 크래스모듈을 사용한 것을 비교해 보아도
뭐가 더 좋은지 잘 모를 것이다
좀 더 위의 것을 확장해 보자
특히 위의 화일에서는 정식 속성이 아닌 휠드를 사용하여
값을 전달하였었다
이제 정식으로 속성을 만들어서 값을 전달해 보도록 하자

일대일로 값을 전달하고 만들라고 시키는 것이 좀더 간결하고
편리하다



그림과 같이
A=100
B=xx
C=23
와 같이 정보를 일대일로 전달하면 아주 간략하고 관리하기 편리하다
그래서 하나의 값만 주고 받는 속성이 편리한것이다