Start Excel |MsgBox()|InputBox()|Range|Sort|
|Application.Transpose|Activesheet.Columns|Cells|UsedRange|
엑셀과 VB언어와의 관계
이제 본격적으로 엑셀프로그래밍을 시작한다
지금까지는 VBA라는 언어에 대하여 이야기 했었다
VBA를 지원하는 모든 프로그램
(워드,억세스,파워포인트,오토캐드등등..)에서 공통으로 사용하는
언어에 대하여 이야기한것이다
엑셀에 대한 이야기는 별로 하지 않았었다
엑셀을 진행하면서 VBA의 내용중 설명이 부족하였던 것을
추가로 해 나가도록 한다
왜냐하면 엑셀이라는 대상을 다루어 가면서 설명해야
이해할수 있는 내용들이 많기 때문이다
VBA는 정보를 저장할수 있는 기능도 없고
정보를 표현할 인터페이스도 없다
있는것은 고작..MsgBox함수와 InputBox함수로
나타나는 대화상자만 있을 뿐이다
VBA는 엑셀의 뒤에 숨어서 엑셀과 대화를 할수 있도록 해줄뿐이다
앞페이지에서 다루었던 VB언어에 대한 이야기는 엑셀을
이야기하면서 계속 반복되거나 앞페이지에서 다루지 못하였던
VB언어관련이야기를 추가하거나 혹은 앞페이지를 다시 추가 시키거나
하면서 진행할 것이다
각각의 페이지는 수시로 수정,보완,추가 될수도 있으니
한번 보았다고 끝나는것이 아니니..수시로 참고서로 활용하시기 바란다
이미 만들어져 있는 오브젝트들을 다룬다
여러분이 보고 있는 웹페이지는 Explorer라는 프로그램이다
다른 Navigator라는 웹프로그램도 있었지만..지금도 존재하는지 어떤지
모르겠다
이 웹프로그램도 엑셀과 마찬가지다
오브젝트로 구성된것이다
버튼을 크릭해보시기 바란다
크릭할때마다 버튼이 변한다
현대의 거의 모든 프로그래밍은 크게 대별하여
Excel이나 Explorer라는 웹브라우져프로그램을
처음부터 만들어 내는 사람(MS의 프로그래머들)과
이미 만들어져 있는 프로그램의 구성요소를 자기가 원하는 대로
구성,조립하는 사람이 되는 것이다
여러분들은 후자가 되는것이다
이미 제공된 자원을 활용하는것이다
나는 창의적인 사람이야..남들이 만든것을 다시 하기는 싫어!!
내가 모두 깨부수고,처음부터 다시 만들꺼야!!!라고 하는 사람이 있다면
글쎄..!@#@엑셀이나 웹브라우져를 처음부터 다시 만들겠다고 하는 것과 마찬가지다
엑셀프로그래밍을 한다고 하는것은 이미 만들어져있는
자원(오브젝트들과 그들이 갖고 있는 기능들)을 빨리 파악하고
이것을 VBA로 다루어서 원하는 소루션을 만드는것이다
UNO-EXCEL-PROGRAMMING에서는 수시로 웹브라우져에서 엑셀과
유사한 작업을 시뮤레이션하면서 진행할것이다
웹브라우져상에서의 프로그래밍에 관심이 많으신 분들은
더불어 얻을수 있는 관심거리가 될수 있을것이다
한가지 덧붙여 웹브라우져의 오브젝트는 엑셀의 오브젝트에
비하면 유치원아이들 수준의 것이다
그러니 엑셀을 통해 프로그래밍의 컨셉을 깨면
다른 것들은 우습기만 할뿐이다
그러면 엑셀을 구성하고 있는 오브젝트들을 어디에서 볼수 있을까??
아래의 내용을 살펴보시기 바란다
만약에 통합문서에 워크시트 한장을 삽입시키고 싶다
라는 생각이 있다면 워크시트를 관리하는 클래스(오브젝트의 원형)을
찾아서 활용하면 되는것이다
만약, "엑셀의 워크시트의 열을 1000개로 만들고 싶다!!"
라는 욕심이 생겨도 이것을 할수 없는 일이다
엑셀의 Range오브젝트가 제공하는 열의 갯수는 최대 256개 인것이다
이렇게 각각의 오브젝트가 제공하는 자원까지만 활용하는것이
엑셀프로그래밍이다
새로운 버전이 나올때..Range오브젝트에 한없이 열을 추가하는 기능을
오브젝트원형에 만들어 준다면 그때는 가능한것이다
다음버전(Office 12)에는 그렇게 된다고 한다
아무튼 오브젝트의 원형(클래스)들에서 제공되는 자원을
최대한 활용하여 여러분의 문제를 푸는 소루션을 만들면 되는것이다
위와 같이 개체찾아보기를 참고서로 하여 궁금하시면
열어보시기 바라고..
이제 부터 핵심 오브젝트들을 하나,하나 따져나가 보도록 할것이다
이미 만들어진 오브젝트를 다룬다는 의미는??
이미 만들어진 오브젝트를 다룬다는 의미가 무엇인가를 보도록 하자
앞에서 VBA문법을 설명할때 ..VBA에서 만들어진값을 어디에
공급할지 ..MsgBox함수를 통하여 대화상자를 띄울뿐이였다
그러나 엑셀의 이미 만들어진 오브젝트를 다룬다고 하는것은
VBA를 통해서 가공된 값들을 뿌려줄곳이 있다는것이다
예를 들어서 15개의 난수를 발생시켜서 엑셀시트에 뿌려보자
만약 엑셀오브젝트가 존재하지 않는다면 만들어도 공급할 장소가
없는것이고 ..공급할 장소가 바로 이미 만들어진 오브젝트를 활용하는것이다
| A | B | C | D | E |
1 | | | | | |
2 | | | | | |
3 | | | | | |
4 | | | | | |
5 | | | | | |
6 | | | | | |
7 | | | | | |
8 | | | | | |
9 | | | | | |
10 | | | | | |
11 | | | | | |
12 | | | | | |
13 | | | | | |
14 | | | | | |
15 | | | | | |
Sub Sample()
Dim iX As Integer
For iX = 1 To 15
ActiveSheet.Columns(1).Cells(iX).Value =Int(Rnd()*10000)+1
Next
MsgBox "난수가 15개 만들어 졌고,크기순서로 정렬합니다"
ActiveSheet.UsedRange.Sort Cells(1)
End Sub
위와 같이 엑셀프로그래밍은 VB언어에서 15번 순환을 하면서
값을 만들면서 이것을 엑셀오브젝트(각각의 셀)에 전달하는것이다
전달받는 장소..즉 엑셀이 지원하는 Range오브젝트를 활용하는것이다
엑셀이 없다면 이렇게 생성된 값을 어디로 보낼것인가???
하나 유심히 보아야 할 부분이 있다
앞에서 VB문법을 이야기 할때 배열의 중요성을 엑셀을 하는 분들은
등한시 한다고 했었다
이유가 위에 있다
Range오브젝트가 제공하는 Sort라는 메소드가 정렬을 해버린것이다
만약 Sort라는 메소드를 제공받지 못한다면
배열에서 정렬을 하여야 하는것이므로
아래와 같이 작성해야 한다
그러나,만약 배열을 잘활용할줄 안다면(강조하지만 잘 하는것이 좋다)
배열로 처리해버리는 테크닉도 갖추고 있는것이 좋은것이다
이유는 다른 프로그램..예를 들어서 웹브라우저를 프로그래밍한다면
엑셀의 Sort같은 메소드는 제공받지 못하므로
스스로 배열로 처리하여야 하기 때문이다
Sub Sample()
Dim iX As Integer,iY As Integer
Dim arrX(1 To 15) As Variant
For iX = 1 To 15
arrX(iX)=Int(Rnd()*10000)+10000
Next
'배열로 정렬
For iX=1 To 14
For iY=iX+1 To 15
if arrX(iX)>arrX(iY) Then
iTemp=arrX(iY)
arrX(iY)=arrX(iX)
arrX(iX)=iTemp
End If
Next
Next
MsgBox "난수가 15개 만들어 졌고,크기순서로 정렬합니다"
ActiveSheet.Range(Cells(1),Cells(1).Offset(14,0))= _
Application.Transpose(arrX)
'ActiveSheet.UsedRange.Sort Cells(1)
End Sub
아래 화일은 문자열과 배열과 Range오브젝트를 골고루 활용하여
문자열을 배열로 만들고 배열을 위로 정렬,아래로 정렬,
배열의 요소를 Random으로 섞기(Shuffling)하여 범위에 전달하는 예문으로서
초보님들은 어느 정도 오브젝트를 이해하신후 보시기 바란다
Convert String To Array And Sort_Shuffle
엑셀은 모두 오브젝트로 이루어져 있다
그러나 엑셀은 모두 오브젝트로 이루어졌다!!라는 말을 기억하시기 바란다
엑셀을 다루려면,엑셀과 대화를 하려면
엑셀의 오브젝트와 대화를 하는것이다
실은 엑셀뿐만이 아니고 모든 현대의 응용프로그램들은 모두
오브젝트로 구성 되어 있는것이다
엑셀이 제공해주는 Range오브젝트는 행과 열로 구성된
테이블인것이다
만약 웹브라우져에서 테이블을 그린다고 하면 어떻게 그릴까??
엑셀에서와 같이 Range오브젝트에서 공짜로 이미 만들어진것을
얻지 못하고 아래와 같이 일일이 복잡하게 그려야 한다
예를 들어서 이 곳을 크릭해 보라
물론 웹브라우저에서도 웹브라우져가 제공하는 오브젝트를 다룬다
접근하여 하고 싶은 짓을 마음대로 할수 있는것이다
아래는 웹페이지에 심어진 프로시져이다
위의 녹색문장을 크릭하면 이 프로시져가 호출되고
작성된 내용대로 웹브라우져(Explorer)의 오브젝트에 접근하여
하고 싶은 작업(테이블만들기)을 하게 되는것이다
sub makebox(oX)
dim i,j
set box=document.getElementById(oX.link)
sT="<table>"
iX=int(rnd()*10)+3
iY=int(rnd()*10)+3
for i=1 to iX
sT=sT & "<tr>"
for j=1 to iY
sT=sT & "<td>" & int(rnd()*9)+1 & "</td>"
next
sT=sT & "</tr>"
next
sT=sT & "</table>"
box.innerHTML=sT
end sub
테이블만들기를 위하여 공을 들여야하지만
엑셀은 엑셀에서 제공하는 Range오브젝트를 이용하면 되는것이다
엑셀프로그래밍은 다른 프로그램보다 제공하는 기능들(오브젝트들)이 보물상자같이
쌓여있다는 점이다
또한 엑셀프로그래밍은 다른 곳까지 확장하지 않더라고
하다가 중단한다고 하더라도..엑셀하나만은 확실하게 여러분의 것이 되는
절대로 손해보는 장사가 아닌것이다..!!!