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

Excel & VBA---Brain Training



한가지 주제로 너무 많은 페이지를 넣지 않나 걱정되지만..(지루해하지 않을까??)
내친 김에 더 진행하자..
영문법책을 보면 항상 앞의 20여페이지만 보고 마는 습관들이 있어서..

아무튼
Range오브젝트와 관계가 깊은 Worksheet오브젝트를 해야지..
Range오브젝트는 엑셀프로그래머가 만드는 것이 아니다 이미 한장의 워크시트가
만들어지면 자동으로 셀들이 만들어지는 것이고 이것은 다시 말해서
우리가 Range오브젝트를 만들 필요는 없는 것이다
그냥 찾아가면 되는 것이다
그렇다면 Worksheet는 엑셀프로그래머가 만드는 것인가??
여러분의 통합문서는 새것을 만드는 순간..Workbook도 만드는 것이다
Range오브젝트는 만드는 것이 아니다
통합문서를 만드는 순간..시트가 3장으로 항상 시작되기도 하고
5장으로 시작되기도하고 이것은 사용자가 도구/옵션에서 몇장으로 만들겠느냐??
를 설정하기에 따라서 달라진다..
물론 이것도 프로그래밍적으로 컨트롤 할 수 있는 것이고..
아무튼 워크시트는 만들수 있는 것이다
만들수 있다는 것은 삭제를 할수도 있다는 소린가??
그렇지..만든것은 없앨수도 있다
그럼 Range오브젝트는 만들수 없는 것이면
없앨수도 없겠네..없지!!!
삭제하는 방법은 해당 범위가 Range오브젝트가 있는 시트를 삭제하면 된다
그래서 모든 만들수 있는 오브젝트들은
Add메소드가 있고
Delete메소드가 있다
Add라는 단어도 알것이고 Delete도 알것이고...
자판의 Del버튼이 Delete이니 당연히들 알것이다
그러니 벌써 기본적으로 Add, Delete두개의 메소드는 알고 있는 것이다

WorkSheets.Add

라고 직접실행창에 입력하고 계속 Enter키를 쳐보시라..
워크시트가 계속 삽입될것이다

다시 이야기 하지만..Range오브젝트를 추가시켜보겠다고
미련곰퉁이 같이..

Range("A1").Add

어쩌구 해보려고 하지 마라..에러니까!!!

우노도 쫄짜일때 이런 무모한 짓을 했었으니까..!!
다시 말하지만 Range오브젝트는 생성하는 것이 아니고 만들어준것
엄밀히 말하자면
Worksheets.Add 하여 Worksheet오브젝트가 생성되면서
자동으로 워크시스오브젝트에 만들어진것
필요한 만큼 찾아서 사용하면 되는 것이다

Sub AddSheet()
Dim iX As Integer
For iX = 1 To 10
     WorkSheets.Add
Next
End Sub

위의 것을 해보면 그냥 Worksheet오브젝트가 줄줄이 10장이 만들어질것이다
정말 간단하지 않은가??!!
100장을 만들어도 좋고..1000장을 만들어도 좋고..
여러분의 컴퓨터의 Ram용량이 허용하는 만큼 만든다

Add..Add...Add..Add...
Add하는 만큼 Add된다...worksheets added as much as you add

그런데 눈썰미가 있는 분들은 무언가 발견했을 것이다
Worksheets.Add
s짜가 붙어있는 것은 도대체 뭐야???
앞으로 Add라는 메소드는 항상 s짜가 붙어있는 것에서 사용된다는 것을
알면 좋겠다
S는 언제 붙이나???
복수일때 S를 붙인다는것은 누구나 다 알것이다
복수일때..단수일때가 아니고 복수일때..
복수????
그렇지 않겠나???상식적으로 생각해 보시라!!!
계속 Add시킨다면 같은 놈이 계속 생긴다는 것이고 같은 놈이 계속 여러개
있으면 복수가 아닌가???
요것을 여러명이 떼거지로 있는 것이고 그러다 보니..
이것을 관리할 오브젝트가 하나 필요하게 된다
그래서 바로 ...또 용어가 나오면 징그럽다
공연히 스스로의 뇌의 캐파를 생각하게 되고 또 뭐를 머리속에 입력해야하나??
단어를 입력하려고 하지 말고..영어공부도 마찬가지..
의미를 입력하면 외우려고 하지 않아도 자리를 잡는다
집합체오브젝트라고 한다..여러명이 있는 것은 집합아닌가???
영어로 Collection오브젝트..s가 붙어있는 것은 거의가 집합체오브젝트이다
집합체오브젝트는 Add메소드를 갖고 있고
몇명을 때려넣든 집합체오브젝트의 관리하에 들어가게 된다
당연히 Range오브젝트는 상위 집합체오브젝트가 없다!!!
그러므로 또한 Add메소드도 없다!!!

언젠가 죽은놈 뼈다귀만 모아서 수사를 하는 영화가 있었지..
이때 영화제목이 Bone Collector였던가..
Collect모으는 것..Collection ..모아놓은 것..그러니 집합체오브젝트!!!

시트상의 전체 셀들(Range오브젝트)를 관리하는 Cells의 마지막 s는
여러개의 셀을 관리하는 집합체라고도 할 수 있을 것이다
몇개 건방지게 s를 붙이고 있는 넘들도 있지만 신경안써도 된다
Range오브젝트는 Add메소드가 없다고 하였으니..당연히
Cells는 Add메소드가 없다

그런데 워크시트를 Add메소드를 사용하여 만든후
만든 시트의 Range("C3")에 값을 3을 넣고 싶다면 어떻게 할것인가??
즉 새로만든 워크시트오브젝트에 어떻게 접근할 것인가???가 문제다

Worksheets.Add
까지는 했는데..시트가 만들어지기는 했는데..
이때 변수가 절실히 필요해 진다

Dim shtX As WorkSheet
Set shtX=Worksheets.Add

와 같이 하는 것이 철저하게 지켜야 할 공식이라고 생각하시기 바란다
물론 이렇게 해도 된다

Worksheets.Add.Range("C3")=3

그러나 한번 작성해 보시기 바란다

Dim shtX As Worksheet
Set shtX=Worksheets.Add
shtX.Range("C3")=3

이라고 해보고..또..

Worksheets.Add.Range("C3")=3

이라고 할때 어떤 차이가 나는지 발견하면 눈썰미가 좋은 사람!!!
아무튼 변수없이 하면 간신히 하나의 속성은 사용할 수 는 있을지라도
또 다른 값을 넣으려면 난감해진다

Worksheets.Add.Range("C3")=3

라고 한후 해당 시트에 이름을 지어주고 싶다면 방법이 없다
해당시트의 어떤 셀에 값을 넣는 작업은 가능했으나 다른 작업을
시킬수가 없는 것이다
그래서 귀찮아하지 말고

Dim shtX As Worksheet
Set shtX=Worksheets.Add
shtX.Range("C3")=3
shtX.Name="MySheet"

라고 이름도 붙여주고 더 많은 작업을 줄줄이 할수 있게 되는 것이다
그래도 나는 변수 쓰기가 죽기보다 싫어요!!!
그렇다면 이렇게 하라!!!

With Worksheets.Add
.Range("C3")=3
.Name="MySheet"
End With

가능하다..
그러나 프로그래밍은 한참 하다보면 또 조금 전에 만든 워크시트에
값을 옮기거나 값을 갖여오거나 하여야 하는 일이 생기는 것이 프로그래밍이다
이때 다시 MySheet라고 지어진 이름의 시트에 접근해야 하는데
번거로워진다
그래서 부지런이 변수를 하나 만들고..

Dim shtX As Worksheet
Set shtX=Worksheets.Add
shtX.Range("C3")=3
shtX.Name="MySheet"

그리고 다른 작업을 한참 한후에라도..
변수만 다시 갖여다 사용하면 되는 것이다
뭔..작업을 한참하다가...다시 조금전에 만든 시트를 참조하려면
(접근한다는 말을 주로 참조(Reference)한다고 하니까..그소리가 그소리다)

다시 접근하여 그 시트의 3번째열에 어떤 작업을 하고 싶다면

shtX.Columns(3).Interior.ColorIndex=5

라고 귀찮아도 만들었던 변수를 사용하면 되는 것이다
귀찮아도 변수사용의 습관은 프로그래밍을 반은 먹구 들어가는 셈이다
Columns속성은 Range오브젝트를 갖여오는 또 다른 속성이다
이것도 s가 붙어있다..
워크시트에는 여러개의 열이 집합적으로 있다..
이것도 하나의 집합체인것이다
그러니 여러개의 열중에서 3번째놈...Columns(3)인것이다
s붙은 것은 집합체!!!그러나 이놈은 Add메소드가 없는 생성할수 없는
집합체다..
주어진 만큼만 사용하는 집합체
Worksheets는 계속 Add하여 새로운 시트를 생성할수 있는 집합체

새로만든 오브젝트는 항상 변수에 담아라!!
라는 습관을 드리시기 바란다
물론 고수가 되면 최대한 변수도 쭐여서 요령껏 작성하려고 하지만
좋은 습관은 아니다

첨에는 무조건 변수를 사용하는 습관을 들여라..그 것이 원칙이다
나중에 감각이 생길때 그때..변수를 쭐여 보려고 노력하라!!

이제 아래와 같이 해보자
워크시트를 26장 생성하고
각시트의 이름은 각각 A,B,C,D,,X,Y,Z 알파벳 26자를 사용한다
그렇게 만들면서 각 시트에 앞에서 한장의 시트에 하였던 것을 똑같이
실행한다
모두 앞에서 한장의 시트에 만든것과 같은 것이 26장 만들어지도록 하는 것이다

Dim iX As Integer
Dim shtX As WorkSheet
For iX =1 To 26
      Set shtX=Worksheets.Add
      shtX.Name=........A,B,C,D를 순환할때마다 차례대로 붙여지게 하고..
       이제 이 시트에 앞에서 한장의 시트에 만든 내용을 그대로 실행한다
       이곳에 직접해도 좋고 앞에서 사용한 프로시져를 호출하여도 좋다
Next

아주 좋은 연습이 될 것이다


BrainTraining_065_10.



계속 순환문을 돌려 보자
이번에는 통합문서를 10개 만들고 각 통합문서에는 26자의 시트를 만들고
각각의 시트에는 셀에 작업하는 짓을 해보고..
다음 페이지에서..WorkBook오브젝트를 살펴보자