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

Excel & VBA---Brain Training



빈시트를 통합문서의 첫째시트에 삽입한후
worksheets(1).Range("C3").range("B5:C7").value=3
이라고 직접실행창에 입력하고 엔터키를 쳐보시기 바란다
어떻게 입력되었는지 확인하시고..
Worksheets(1)이라고 하는 것은 시트명을 속성의 매개변수로 전달해도 되고
몇번째시트인지 인덱스번호를 전달해도 해당 시트를 얻어낼수 있다!!
는것을 잊지 마시고..

중요한것은 Range("C3")에서
또..Range오브젝트를 얻어낼수 있다는 것인가???
그렇다..Range오브젝트는 또 다른 Range오브젝트에 접근하게 해주는
Range속성이 있다고 생각하시면
위의 표현식이 이상하지 않을 것이다
Range("C3")를 기준으로 엑셀은
또 계산하여 또다른 Range오브젝트에
접근 시켜주는 것이다
Range("C3")를 해당 범위의 첫째 셀..즉 Range("A1")으로 간주하고
또다른 Range오브젝트에 접근 시켜 주는 것이다
Range("B5:C7")속성이 어디를 기준으로 하느냐에 따라서
즉 어떤 범위의 속성으로 사용되느냐에 따라서 해당 Range오브젝트를
기준으로 범위가 계산되는 것이다

별로 이런 표현식은 쓸일이 없지만..
Range오브젝트의 성질머리를 알아두는 것이 좋다
또 직접실행창에
Range("C3")(3,3)=3
이라고 하고 엔터키를 쳐보라
Range("C3")를 기준으로 행으로 3번째 열로 3번째이동된 위치에 3일 들어간다
이것은
Range("C3").Cells(3,3)에서 Cells속성을 생략하고 자주 사용한다

Range("C3").Resize(100,100)=3
이라고 하고 쳐보시면
Range("C3")를 기준으로 행으로 100개 열로 100개로 확장된 범위에
값이 3이 들어간것을 알수 있다
이것은 또다른 Range오브젝트를 얻어내는 속성 Resize속성이다
Resize속성 결국은 Range오브젝트를 얻어내주는 속성인것이다
재미있나???
헷갈리나???
재미있어야 하는데!!!
이렇게 미친짓을 해보자

Range("C3").Resize(100,100).Resize(10,10).Resize(1,1)=3

이라고 하면 어디에 3이 들어갔나???
그냥 C3셀에 3이 들어간것이지..중간과정은 열나게 계산하다가
결국은 마지막 계산값 Resize(1,1)로 끝나니까..
결국은 C3셀 하나 인것이다

또 중요한 Range오브젝트이 속성중에 Offset속성이 있다
물론 이것도 Range오브젝트에 접근시켜준다
아마도 수식에서 Offset함수를 많이 사용하였던 분들은 그냥 이해가 될것이다

Range("A1").Offset(1,1)=3

이라고 한다면 Range("A1")에서 한행 밑으로 한열오른쪽으로 떨어진 또다른
범위(Range)에 값을 넣는 것이다

Range("A1").Offset(-1,-1)=3

이라고 하면 어떻게 될까..
에러가 퍽나지..!!!
Range("A1")에서 한행 위로 한열 왼쪽으로 갈곳이 없다
그러니 에러!!!
흔하게 발생하는 에러가 된다

Range오브젝트에 접근하는 훈련이 잘되면 나머지는 쉽다
Range오브젝트는 제일 중요하면서..중요하니까..또한
Range오브젝트만큼 초보님들을 헷갈리게 하는 것이 없다!!

Range("C3").Offset(3,3).Resize(10,10).Offset(10,10)=3

이라고 해도 역시 Range에서 또 Range을 얻고
얻은 Range에서 또 다른 Range를 얻고 수십번 엮어도 마찬가지
시키는 대로 찾아다닌다
그러나 찾다가 Offset같은 경우 위의 에러과 같은 것을 만나면..에러다!!!

그냥 위와 같이 줄줄이 범위에 접근하는 방법과
좋은 습관의 코딩방법을 보도록 하자


BrainTraining_065_8.



극단적인 표현이기는 하지만 좋은 프로그래밍컨셉은 변수를 잘 활용하고
한줄..한줄 정성껏 작성해 나가야 수천줄이 되어도 헷갈리지 않게 프로그래밍을
효율적으로 할수 있게 된다

Range오브젝트를 찾아서 처리하는 것은
앞으로 계속 나올 것이니
위의 것은 Range오브젝트는 또 그 속의 Range오브젝트,혹은 그 것을 기준으로하는
주어지는 위치이동값에 의하여 Range오브젝트를 접근하게 해주는 다양한 속성들이
있다는 컨셉을 조금씩 이해하는 것으로 하고
다시 본론으로 들어가서

어떤 하나의 셀(Range오브젝트)에 난수를 발생하고 난수의 값이 어떤가의
조건에 따라서 셀의 서식을 해주는 것으로 돌아가서..
하나의 셀을 처리하는 것은 했으니
이제 떼거리로 셀들을 처리하는 것이 마지막 순서가 된다
다음 Brain Training에서는 또 다른 방법으로 VBA를 숙달시키는 훈련코스를 계속하자

떼거리로 처리는 순환문이 필요하다고 했고
행방향으로 순환하고
열방향으로 순환하는 순환속의 순환을 하면

For iX =1 To 20
        For iY=1 To 20
                순환하면서 얻어지는 iX값과 iY값을 이용하여
                범위에 접근하는 방법은 다양하다
                같은 셀에 접근하지만 다양한 접근 방법이 있다는 이야기
                요렇게 접근한 셀에
                1에서 10사이의 난수를 값으로 주고
                If 값이 어떠면 Then
                     이렇게 만들고
                ElseIf 또 값이 어떠면 Then
                     요렇게 만들고
                Else
                     조렇게 만든다
                End If
                주어진 값의 조건에 따라서 셀과 문자의 서식을 해주는 작업이다
        Next
Next

또 하나의 프로그래밍테크닉상의 좋은 습관과 방법은
iX와 iY를 값으로 얻어낸 셀에
어떤 작업을 해준다는 것
행방향 순환(20번)*열방향순환(20번)은 400개의 셀에 같은 작업을
400번 한다는 것과 같다
이부분에서 어떤 생각이 드시는가???
400번의 같은 작업!!!!!
여러분이 회사사장이라고 한다면 이렇게 반복되는 작업을
전문회사에게 주문을 하는 것이 더 좋다고 생각하지 않으시는가???

물론 스스로 자신의 공장에서 만들어도 된다
방법상의 문제인 것이다
이런 방법..저런 방법 결과는 같다
그러나 사람이라면 좀더 효율적이고 관리하기 편리한 방법을
택하게 될 것이다

똑똑한 방법을 택하면 똑똑한 사람이 되는 것이고
미련한 방법을 택하면 미련한 사람이 되는 것이다
우노가 항상 떠들고 항상 엑셀프로그래밍은 할만한 것이라고 하는 이유는
이런 문제의식을 갖게되는 훈련을 한다는 것이다
이런 훈련을 어디서 하겠는가???
논리적도구/자동화도구 엑셀을 한분이라도 많이 사용하게 하려는 이유는
논리적 생각..효율적 생각의 연습들을 하시는데 가장 좋은 방법이기때문이다

나이키같은 그로벌 회사는 위와 같은
순환문과 조건문의 콘트롤 구문만 갖고 있는 회사라고 보면 좋을 것이다
시장조사를 하고 어떤 유형의 신발이 유행을 할것인지
검토하고 분석하고 디자인을 개발하고
요렇게 ..저렇게 만들라는 스펙을 작성하여
하청회사에 대량으로 생산지시를 하는,자체 생산라인이 없는 회사인것이다

프로그래밍속에서는 여러분이 나이키같은 콘트롤타워만 갖고 있는 프로시져도
작성하기도 하고 이런 것을 만드는 하청공장, 저런 것을 만드는 하청공장을
만드는 프로시져들을 작성할 수 도 있게 되는 것이고
자꾸 연습하다 보면 그런 감각이 생기게 되고
그렇게 되어야 프로그래머 인 것이다

이제 마무리..
자연스럽게 그려지는 방법과 요란스럽게 그려지는 방법
그리고 독립된 프로시져를 만들어서 호출하기..등을 해보자




BrainTraining_065_9.



다음 페이지에서는
여러장의 워크시트..
즉 Worksheet오브젝트쪽으로 더 확장해 나가보자