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

Stupid Macro Recorder,But Useful!!

매크로 기록기의 활용

엑셀프로그래밍에서 항상 초보님들이 헷갈리는 의문은
VBA는 무엇이고 엑셀은 무엇이냐는 이야기다
VBA만 알고 엑셀은 모른다고 하면

크릭!!!

와 같은 것 밖에 못한다
그렇다면 어떻게 하면 엑셀에게 일을 시킬까??
이말은 엑셀의 오브젝트들을 어떻게 알아 낼수 있을까?
다른 방법도 있겠지만,가장 손쉬운 방법은
매크로 기록기를 사용하면 된다
예를 들어서 셀의 바탕색을 노랑색으로 하고 싶다
그렇다면 셀은 어떤 오브젝트인가..
그리고 셀을 가르키는 오브젝트의 어떤 속성에 색상값을 주어야 할까??
를 알아내야 한다

아래의 그림과 같이 매크로 기록을 하면,



셀선택/도구/매크로/새매크로기록

이렇게하여 얻어진것이 무엇인가??
자동으로 기록된 코드를 보니 아래와 같다

Sub Macro1()
' Macro1 Macro
' UNO이(가) 11/03/2006에 기록한 매크로
'

Range("D3").Select
With Selection.Interior
    .ColorIndex = 3
    .Pattern = xlSolid
End With

End Sub

Select라는것을 얻었고
Range("D3")라는것을 얻었고
Selection이라는것을 얻었고,Interior,ColorIndex라는것을 얻었다

한번 더 해보자
이번에는 매크로기록을 상대주소로 해본다



매크로정지버튼의 오른쪽버튼을 크릭하면 상대주소로 기록된다

기록된것을 정리하면 아래와 같다

Sub Macro1()

ActiveCell.Offset(2,1).Range("A1").Select
With Selection.Interior
    .ColorIndex = 3
    .Pattern = xlSolid
End With

End Sub

몇개의 단어를 더 얻었다
ActiveCell을 얻었고,Offset이라는것을 추가적으로 더 얻었다
Macro기록기는 사용자가 행동 하는 것을 그대로 기록한다
그래서 셀을 선택한다는 행동이 Select이고
Selection은 선택된 상태의 오브젝트를 말하는것이다
Select는 선택한다는 행동이므로 Method이고
Selection은 선택된 상태의 것이라서 Proerty이다
Select와 Selection은 워크시트의 범위에만 해당되는것이 아니고
도형이라던가 챠트등에서도 모두 공통적으로 사용된다
사용자가 무조건 아무 오브젝트나 물리적으로 선택하면
Select이고 선택된 상태의 오브젝트는 Selection인것이다
범위이던 챠트이던 도형이던 상관없이 Select이고 Selection인것이다
그리고 엑셀프로그램에서 선택된것은 항상 하나의 개체만 선택된다
챠트를 선택하면서 범위를 동시에 선택하는 일은 없다
그래서
TypeName(Selection)
이라는 VBA함수에 넣고 알아 보면
무엇을 선택하였느냐에 따라서
답은 "Range"라고 결과가 나오던가 "Shape"라고 나온다
만약 도형을 선택하였다면

이제 문제는 매크로의 기록을 보고 이것을 이용하여
자신이 원하는 코드를 작성하고 싶은데
이제 막 프로그래밍을 시작하신 분들은 아래와 같이 한다
거의 모두가 아래와 같이 하고 더이상 발전을 하려고 하지 않는다

Range("A1")셀을 선택한 상태에서
위의 두개의 매크로 기록에서 얻어낸 단어를 나름대로 적절히 응용을 한다!!

Range("A1").Select
Selection.Interior.ColorIndex=3
Selection.Offset(1,1).Select
Selection.Interior.ColorIndex=3
Selection.Offset(1,1).Select
Selection.Interior.ColorIndex=3
Selection.Offset(1,1).Select
Selection.Interior.ColorIndex=3




실은 위와 같은 방법은 프로그래밍에 간신히 눈을 뜨고
막 신기해 할때의 솜씨가 된다
그러나 위와 같이 Select,Selection으로 범벅이 되고
반복되는 구문이 계속 발생한다면 프로그래밍 없이 그냥
손으로 하나,하나 서식을 하는것이 빠를지도 모른다
[프로그래밍의 원칙은 절대 중복작업을 허용하지 않는다]
위의 구문을 보면 계속 중복되는 작업이다

앞에서 VBA의 기초를 익혔다면 아래와 같이 작성이 되어야 한다
변수가 왜 필요한지도 이해하였고
순환문이 왜 필요한지도 알고 활용할줄도 알면 기초가
잡히기 시작한것이다

아래는 순환문이 돌면서 변수의 값이 계속 변하고
이 변수가 Offset(행값,열값)속성의 각각의 값에 대입되면
변수의 역활을 잘 수행하고 있는것이다

Dim intX As Integer,intY As Integer
For intX=0 To 3
   For intY=0 To 3
      Range("A1").Offset(intX,intY).Interior.ColorIndex=3
   Next
Next




잘 보셨을것이다
위에서 굵은체의 구문이 엑셀이고 그렇지 않은것이 VBA구문이다
매크로기록기로 얻어낼수있는 문장이 바로 위와 같이 굵은체의
문장..엑셀의 자원에 접근하는 문장을 얻어내기 위함인것이다

다시 말해서, 엑셀프로그래밍은 엑셀오브젝트와
VBA문법의 조화를 이루는 작업인것이다
이런 개념을 알면,억세스의 VBA가 쉬워요??
아니면 엑셀의 VBA가 쉬워요???같은 질문은 하지 않게 될것이다
VBA는 똑같은 언어이고,엑셀이나 억세스가 서로 틀린것이다
매크로 기록기는 순환문도 할줄 모르고
조건문도 할줄 모르고
(위의 예에서 조건문은 사용하지 않았다
쌤플시트에서 보도록 하시기 바란다)
변수도 선언할줄 모르고
오브젝트의 접근도 Select,Selection을 좋아한다
이런 점을 감안하고 매크로기록기를 활용하시면 도움이 될것이다
우리가 말하는 언어나 프로그래밍언어나 똑같다!!
하이!!굿모닝소리가 외국인을 보면 반사적으로 나올수 있을까?
뻔히 아는 문장이 생각이 나지 않는다
똑같은 원리다
뻔히 다 아는 것 같으면서도 막상 자판을 잡으면 멍해진다
자동차를 음악을 들으면서도 반사적으로 백밀러를
감지하면서 가듯히 문제가 생기면 자판이 두들겨 지게 된다
아무쪼록 VBA의 기본에 충실하고 매크로에서 얻어낸 단편적인
정보로 잘 짜여진 프로그래밍을 할수 있도록!!!!

아래의 화일에는

  • 조건문으로 TypeName()함수를 읽어서 확인후 작업한다
  • 조건문과 순환문으로 매크로에서 얻어낸 문장을 돌린다
  • Offset보다는 Cells속성이 더 편리하지만 매크로기록기는 Cells를 표현하지 못한다
  • Cells속성은 배열과 같은 형식이라서 편리하다
  • Cells속성으로 얻어지는 Range오브젝트를 검토하고(조건분석)
  • 사용자가 원하는 색상을 읽어서 서식한다
  • 아주 편리하지만 매크로기록기에서는 전혀 기록못하는것들..


Use Macro Recorder.