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

Excel & VBA---Brain Training




엑셀프로그래밍을 하면서 처음 해보면서 신기해 하는 것이
아래와 같은 것이다
신년새해이니..[초보님들]을 위하여 쉬운 것으로 시작하자
그리고 계속 최대한 기초에 중심을 둔 문제를 해보자
아래의 버튼을 반복하여 크릭해 보시고..

1에서 부터 9까지의 난수를
매트릭스의 크기도 행방향,열방향도 난수로 크릭할때마다 바뀌게 하고
1에서 3까지는 빨강바탕게 흰문자
4에서 6까지는 파랑색바탕에 흰문자
7에서 9까지는 노랑색바탕에 검정문자로 서식을 해보시기 바란다





프로그래밍을 하면 사람이 Smart해진다..
왜 Smart해질까??
우선 섬세하게 따져야 한다..
위의 간단한 문제라도 따져야 한다
어영부영은 안된다
1에서 3까지는 문자는 어떤색..바탕색은 어떤색..
4에서 6까지는 문자는 어떤색..바탕색은 어떤색..
7에서 9까지는 문자는 어떤색..바탕색은 어떤색..
뭐하나..어여부영은 프로그래밍세계에서는 안 붙여준다
이런 것을 실사회에서 직장에서 하나의 Business Logic을 세우는
훈련이 되는 것이다
예를 들면
마케팅부서에서 고객을 분석하는데
단골고객이라함은...이라고 할때 정의를 제대로 내려야 한다
이런 것이 모두 Bisiness Logic인것이다
단골고객이라함은 3번이상 물건을 구매한 사람이고
또한 이 3번은 각각의 구매기간이 일개월을 넘지 않도록 한다
등등..따져 나가게 된다..
소위 말하는 Define을 제대로 하여야 한다

잘못하면 싸가지 없는 놈,재수없는 놈 소리듣기 좋을 정도로 따져야 한다
인간적으로는 헐렁해도 일에서는 따지는 그런 Smart를
기르는 것이 프로그래밍이다
그렇게 따지지 않으면 일이 안되고 또한 프로그래밍도 안된다
따지지 못할 일은 프로그래밍대상에 넣으면 안된다

보통사람들은 따지기를 귀찮아 하고 싫어하니..
따지지 않게 되고..그래서..
원칙에서 벗어나는 좀 그런..작품들이 나오게 되기도 할것이다

초보님들은 위와 같은 문제가 나오면 무엇부터 하여야 할지 모른다
무엇을 만들던..하나의 쌤플을 우선 만들고
이것이 잘 팔릴것 같으면 대량으로 만든다
요..원칙을 생각하면 된다
쌤플로 하나 만들고..ProtoType이라고도 하고..
좋으면 대량 생산한다
위의 문제에서 어느 것이 쌤플일까????
하나의 셀에 하나의 숫자가 들어가고 들어간 숫자에 따라서
바탕색을 정하고..문자색을 정한다
요것이 하나의 가장 기본적인 구성요소가 된다

아래 버튼을 계속 크릭하시면..



요렇게 조그만 놈이 프로그래밍의 요소는 다 갖고 있다
우선 계산식을 하나 갖고 있다
난수를 계산해내는 계산식(Expression)이 있어야 하는 것이다
하나의 계산식을 수백번..수천번 써먹게 되는 셈이다

발생된 결과값...계산식이란 어떤 결과값을 만들기 위한 최소단위의 프로그래밍이다

이 결과값을 분석을 해야 한다
3보다 크냐 작으냐..6보다 크냐 작으냐..9보다 크냐 작으냐..뭐 이런것..
즉 논리를 따져야 한다는 것..Logical Structure가 나오게 된다

그리고 그것에 따라서 두개의 명령문이 나온다
어느 바탕에 어떤 색을 칠하라!!!
어느 문자에 어떤 색을 칠하라!!!

이렇게 하나의 구성요소가 완성된것이다
간단하지 않은가??
표현식에 대하여 알고..
표현식은 별것이 아니다..여러분이 워크시트에서 열나게 활용하는
수식(Formual)의 다른 표현일뿐이다
여러분이 익히 알다시피..워크시트의 수식에서는 수많은 함수를 적절히
활용했었다

VBA에서는 워크시트의 함수도 활용할수 있지만 VBA가 제공하는 함수들을
사용할수 있게 된다

표현식(Expression)이 필요하다고 했다
1에서 9까지를 만들어내는 표현식..
아주 최소단위의 프로그래밍



위와 같이 하면 엑셀VBA프로그래밍에서 에러가 나게 된다..
프로그래밍은 우리의 눈에 보이지 않는 메모리상에서 이루어지는 것이다
메모리상..허허벌판에 표현식의 결과값이 나왔다!!!
그런데 이 결과값이 갈곳이 없는 고아가 된 것이다
어느 집에 갖다 넣어주어야 한다
집!!!집!!!집이 없으면 메모리상에서 쫓겨날뿐만 아니라..더이상 프로그램이 돌아가지 않는다
뭐 그러 사소한것 같구..화를 내슈..!@#@!#
천만의 말씀이다..
우리가 사는 세상과는 틀린곳이 메모리상의 세상이다
이 감각을 잡아야 프로그래밍이 된다
상상력을 발휘하여 우주공간의
어느 별을 하나 잡아서 이 결과값을 잘 자리잡아주어야
하는 것이다

만약에 엑셀 시트의 어느 셀에서
수식(표현식)을 넣고 계산을 한다면

아래와 같이 수식이 계산되고 결과값을 같은 셀에 담는다
엑셀의 기특한 점이다..이것이 다른 프로그램들과 틀린 엑셀만의 특징이다


눈에 보이는 것은 그냥 테이블의 하나의 칸(Cell)로 보이지만
이녀석은 두개의 값을 갖고 있는 방을 갖고 있는 것이다
어떤때는 수식이 있는 셀을 보여주고 또 어떤때는 값이 있는 셀을 보여주고
수식이 아닌 일반 상수값을 넣을때는 수식때나..값때나 똑같은 값을 보여주고
초보님들은 우선 엑셀에서 이렇게 하나의 방(Cell)이 실은 두개의 방으로
구성되어있다는 것을 알아야 재미있어지는 것이다
하나의 방은 쑈윈도우이고 다른 방은 데켠의 공장인것이다

보이지 않는 메모리상의 구성..이것에 대한 감각을 갖아야 한다
그렇다면 VBA로 표현식을 하여 값이 나오면 이것을 어디에 담기는 담아야 한다
엑셀의 셀에 담을수도 있고
또 어딘가에 담을수 있어야 한다
어딘가에 라는 것은 우리의 프로그래밍의 능력에 따라 다양한 곳에 값을
던져 줄 수 있는 것이다
워드프로시져를 VBA로 프로그래밍한다면 워드 문서상에 값을 던져 줄수도 있고
파워포인트를 VBA로 프로그래밍한다면 파워포인트의 스라이드의 도형속에
값을 던져 넣을 수도 있고..
어디에 던져 넣을까를 훈련하는 것이 바로 엑셀프로그래밍이라고 해도 된다
스스로 만든 공장에서 완성품을 만들기는 만들었는데 어디에 보내줄까???

이때 공장에서 제품을 생산하다보면 생산과 동시에 소비자에게
공급되는 것이 아니지 않은가??
이드멘가..빈창고에 쌓아 두었다가 보내야 하는 야적장이 있던
창고가 있던 ..어떤 공간이 있어야 한다

이것이 바로 초보님들이 헷갈려 하는 변수(Variable)이라고 하는 것이다
변수를 잘활용하여야 융통성있게 제품을 만들면서
중간조립품은 어디에 주욱...두고..
최종조립품은 어디에 주욱...두고..
그리고 최종 소비자(엑셀,워드,파워포인트,웹페이지등등..)에게 공급하면 되는것이다

아래와 같은 한줄도 명령이다

Dim iX As Integer

[iX라는 이름으로 방의 사이즈는 Integer라는 싸이즈로 방을 하나 꾸며라!!!]
라고 명령을 하는 것이다..컴퓨터가 알아먹게..지시를 한것이다
Dim은 Dimension의 줄인말이다.,, 즉 규격이 Integer싸이즈의 방을 만들고
이름을 iX로 붙여준다
이렇게 해놓으면 iX라는 주소만 찾아서 값을 넣기도 하고 얻기도 하는 것이다
메모리상에 여러분이 사용할 공간을 배정받은 것이다
Integer 만한 싸이즈의 방이란 도대체 얼마나 큰방인가???
크고 작고는 데이타가 얼마나 들어갈수 있는 크기인가??를 말하는 것!!
32,768 에서 -32,767 까지의 숫자만 들어갈수 있는 크기이다
실은 Int(Rnd()*9)+1 의 표현식에서 얻은 결과값은 1에서 9까지의 숫자이니..
실은 쓸데없이 큰방이다...숫자는 습관적으로 Integer를 잘사용하니..@#$@#
방이 큰것은 넉넉히 쓰는 것이고 작으면 더 이상 실행불가!!에러 퍽!!
아무튼 아래와 같이 표현식에서 얻어온 값을
이 방에 임시 저장을 할수 있는 것이다

iX=Int(Rnd()*9)+1

위와 같이 변수에 임시로 값을 담었다고 하면 어떻게 써먹을건데???
이제 따져야지..
만약에 iX의 값이 1에서 3까지의 값이면 어떻게 하고
만약에 iX의 값이 4에서 6까지의 값이면 어떻게 하고
만약에 iX의 값이 7에서 9까지의 값이면 어떻게 하고
라는 따짐을 할때마다 iX라는 방에 있는 놈을 불러 오는 것이다
아마도 수식에 능하시면 중첩된 IF함수가 생각날 것이다

=IF(AND(A1>=1,A1<=3),"빨강",IF(AND(A1>=4,A1<=6),"파랑","노랑"))

A1셀의 값을 읽어서 어떨때는 "빨강"이라는 값을 ...
그러니 엑셀의 셀(A1)은 변수역할을 하는 셈이다
VBA프로그래밍에서는 변수를 선언(Dim)하고 즉 방을 개발자가 스스로 만들었다
부셨다가 하면서 자유롭게 사용하는 것이다

VBA에서는 이것을 어떻게 표현하나!!!
아래와 같다

Dim sColor As String

If iX>=1 And iX<=3 Then
   sColor="빨강"
Else If iX>=4 And iX<=6 Then
   sColor="파랑"
Else
   sColor="노랑"
End If

iX라는 임시 정보를 담아줄 방이 없다면 위와 같은 일은 곤란할것이다
iX를 매번 불러서 값을 확인할수 있는 편리한 장치이고
이것이 없으면 아무 것도 할수 없지 않겠는가????
엑셀의 시트상에서는 A1이라는 셀이 하나의 방이고 하나의 변수역할을
해준 셈이다

그래서 프로그래밍은 변수(Variable)을 얼마나 잘 활용하느냐의 문제이다

종종 부탁받은 소루션을 짜주면..
의아해 한다..
아니 뭔 변수,..상수가 이렇게 많아요??!!!
고수와 초보의 차이는 변수의 적절한 활용에서 나타난다

아무튼..
위에서 또 다른 변수
Dim sColor As String
이라는 변수를 또 만들었다
iX를 비교하면서 얻어진 또 다른 결과를 어디엔가에 담아야 한다
그래서 또 방을 하나 만든 것인데..이것은 String이라고 하였다
이것은 숫자와 대별하여 문자열 정보를 보관하기 위한 방인것이다
프로그래밍의 정보를 크게 구분하면 두가지다..숫자와 문자
숫자의 대표적인것이 Integer이고 문자는 String 하나다

다른 언어에서는 문자도 다양한 규격의 타입이 있으나 VBA에서는
편리하게 그냥 String 타입 하나만 알고 있어도 된다

위의 If ~Else 문은 어느 언어에나 존재하는 구조이다
프로그래밍은 조건을 따지는 일이 전부라고 해도 된다
인간사와 비교하여 한마디로 재수없는 짓을 하는 셈이다
짜지는 놈을 누가 좋아하겠는가???
그러니 프로그램하면서 따지는 것이 습관이 되어 일상에서도 따지지마라
그냥 허술하게 보이고 일을 할때만 따져라!!!

위의 IF문은 아래와 같이 SELECT문으로 바꾸면 또한 편리하다

iX=Int(Rnd()*9)+1

Dim sColor As String

If iX>=1 And iX<=3 Then
   sColor="빨강"
Else If iX>=4 And iX<=6 Then
   sColor="파랑"
Else
   sColor="노랑"
End If

위의 IF문을 아래와 같이 Select문으로 바꿔도 좋다

Select Case Int(Rnd()*9+1
   Case 1 To 3
      sString="빨강"
   Case 4 To 6
      sString="파랑"
   Case 7 To 9
      sString="노랑"
End Select

그런데 Int(Rnd()*9+1 이라는 표현식을 변수없이 그대로 사용했네요???
그래도 된다는 것을 보여드리는 것이지..



좋은 방법이 아니다
물론 Int(Rnd()*9+1 이라는 표현식의 결과값을 한번밖에 사용할일이 없다면
좋다!!!
그러다 대개의 경우는 후회한다
왜냐하면 그 표현식에서 얻은 값을 다른곳에서 또 써먹어야
하는일이 90%는 발생하니까!!!
게을러서 대개가 그냥 썼다가..에이!@!@씁..!@# 하고 다시 변수를 만든다
그러니..아래와 같이 곱게 변수를 만드는 습관이 좋다

Dim iX As Integer
iX=Int(Rnd()*9)+1

Select Case iX
   Case 1 To 3
      sString="빨강"
   Case 4 To 6
      sString="파랑"
   Case 7 To 9
      sString="노랑"
End Select

위의 Select Case구문을 보고 워크시트함수가 하나 생각이 나면 다행이다
워크시트함수중 CHOOSE함수가 생각나시는지??
그러나 .CHOOSE함수는 AND..즉 1이상이고 3이하라는 구조는 소화시키지
못한다..그냥 어떤값이 1이면,2이면,3이면등으로 나누어질 뿐이다
위의 현란한 분석구조와는 별로 관계가 없는 단순한 함수다


이제 엑셀이 왜 좋고 훌륭한 개발도구인지 느껴야 할 부분이 나온다
위에서 iX의 값이 어떠할때 어디에 표현을 하기는 하여야 한다
천년만년 임시 저장창고 변수에 담아 놓고 있을 수는 없는 것이다
컴퓨터를 끄면 변수속의 정보는 모두 사라진다
사라지기전에 영원히 저장하는 저장장치에 표현을 해야 한다
만약 엑셀의 시트가 없다면
엑셀의 셀이 없다면 어디에 값을 전달하겠는가??
엑셀이 없다면 무언가 만들어서 사용자의 눈에 보이는 장치를 만들어야 하는
프로그래밍을 하여야 하고 이것은 그야말로 기계쪽에 가까운 프로그래밍을
하여야하는 고생을 하여야 한다
일도 해야 하는데 어떻게 그런 하드 코아 프로그래밍을 하겠는가??
엑셀프로그래밍이 뛰어난 점은 바로 이런 기반시설을 만들 필요가 없이
이미 만들어져 있는 것을 사용하면 된다
우리는 그냥 비지니스로직에 맞추어서 어떤 계산만 프로그래밍하고
결과값을 적절한 엑셀의 이미 만들어져 있는 구성요소에 전달만 하면 되는 것이다
우리의 생각을 그냥 자판으로 우리의 글을 쓰듯이 구성을 하면
되는 것이다

[엑셀에 이미 만들어진 것을 활용만 하면 된다]라는 의미는
임시 정보저장장치인 변수에서 변하지 않는 변수에 저장을 해야 하는 것이다
즉 엑셀의 화일구조속에 잡아 넣는 것이다
여기에서 엑셀의 화일구조속에 우리가 가공한 정보를 저장하기 전까지는
구분하자면 VBA프로그래밍이고
엑셀의 화일구조에 접근하여 저장을 하는 것이
구분하자면 엑셀프로그래밍이다
임시저장장치의 변수는 바람과 같이 사라지는 것이고
엑셀의 화일구조에 전달하면 저장되고 배포되고 영원히 보관된 정보가
되는 것이다

변수..즉 계산된 결과값을 엑셀에 전달하면 엑셀프로그래밍
변수..즉 계산된 결과값을 워드에 전달하면 워드프로그래밍
그래서 VBA의 마지막 글자는 Application즉 특정한 프로그램을 자동하하기위하여
지원하는 VB언어라는 소리다

초보님들이 흔하게 질문하는 VBA프로그래밍은 뭐구..
엑셀프로그래밍은 뭡니까????같은 질문을 하지 않아도 될것이다



그림과 같이 시커먼 부분 엑셀이라는 것이 없으면 이 시키먼것을 우리가
만들어야 한다는 이야기다
그러나 이미 만들어진 시커먼 부분을 활용만 하면 된다는 이야기고..

그러면 VBA프로그래밍과 엑셀프로그래밍을 어떻게 공부하여야 할까??
방법은 VBA프로그래밍은 숙달시켜야 하는 것이고
엑셀프로그래밍은 알아야 한다는 것!!
숙달시키는 것과 알아야 하는 것은 전혀 다르다
VBA는 언어이니 숙달시켜야 하고
엑셀은 계속버전업이 되니 모든 화일구조를 숙달시킬수는 없다
물론 자주 사용하는 이름의 녀석은 자동으로 숙달되겠지만..
다른 자주 사용하지 않는 녀석들은 이름이 잘 기억나지 않지만
어떤기능의 일을 하는 녀석이 어딘가에 있는지를 찾아낼줄 알면 되는 것이다
필요한 것이 어디에 있는지 ..
필요한 녀석의 이름이 무엇인지를 찾아볼수 있는 요령만 알면 되는 것이다

페이지가 너무 기니까..다음 페이지로 넘어가자!!!

2010년도에 단단이 별르고 시작하는 특강이니..빨리 덤비는 자
빨리 얻는다!!!