Exceller Home > VBA 강좌 > VBA 입문강좌

Exceller's VBA 입문강좌

최초 작성일 : 2004-12-10
최종 수정일 : 2004-12-10
작성자 : Exceller (권현욱, exceller@amorepacific.com)

강좌 읽음수 : 85,799회

강좌 제목 : 레인지 오브젝트 - CurrentRegion, UsedRange 속성

잭 니클라우스는 이런 말을 했다고 합니다.

"나는 골프 시합을 할 때마다 항상 머릿속에다 정확한 그림을 그린다. 그리고 나는 공이 멈춰야 할 지점을 바라다 본 후 그곳으로 날아갈 공의 탄도와 착지점을 바라본다. 그 다음에야 나는 내가 그린 이미지를 실제 상황으로 바꾸어 줄 스윙을 할 수 있다."

자신이 원하는 것(혹은 되고자 하는 사람)이 있다면 이미 그것을 가지고 있거나 되어 있다고 상상한 후 그런 자신이 어떻게 느끼고 있는지 현실처럼 또렷이 상상해 보는 것이 중요하다고 합니다.

벌써 12월 중순입니다. 올 한해 마무리도 물론 중요합니다만 내년도 계획을 세워야 할 시기입니다. 내년 연말에 자신이 이루고자 하는 것이 무엇인지 목표를 정한 다음 그것을 이미 이루었다고 상상해 보는 훈련을 시작할 때 입니다. 늘 이루지 못한 것에 대해 후회할 것이 아니라...


VBA 입문강좌 : 중요한 오브젝트 몇 가지


가. 워크북 오브젝트(Workbook Object)

나. 워크시트 오브젝트(Worksheet Object)

다. 레인지 오브젝트(Range Object)


엑셀에는 여러 오브젝트가 있고, 무엇 하나 안 중요한 것이 없습니다만, 프로그래밍을 할 때 가장 활용도가 높은 오브젝트는 과연 무엇일까~요? 맞습니다! Range 오브젝트 입니다. 이번 시간에는 Range 오브젝트를 생성하는 방법 중 CurrentRegion과 UsedRange 속성에 대해 살펴보겠습니다.


CurrentRegion 속성

CurrentRegion이란 '셀 포인터가 놓여 있는 위치를 중심으로 하여 빈 행과 빈 열로 둘러싸인 영역'을 의미합니다. 좀 다르게 표현하자면, '현재 선택된 셀을 중심으로 상하좌우 방향으로 인접해 있는 영역'을 말합니다. 먼 소린가 하는 분들을 위해... 다음 그림을 보세요.

셀 포인터가 A1 셀에 위치하고 있습니다. 이 경우 CurrentRegion, 즉 현재 영역은 어디가 될까요? 위쪽과 왼쪽으로는 더 이상 갈 곳이 없고, 오른쪽과 아래쪽 방향으로 빈 행과 빈 열이 나올 때까지 주욱 따라가 보면... G열 그리고 8행을 만나게 됩니다. 따라서 A1 셀의 CurrentRegion은 빈 행/열을 만나기 바로 전까지의 영역인 A1:F7 영역이 되는 것입니다.

특정 셀에 대한 현재 영역을 선택하려면 다음과 같이 표현하면 됩니다.

Sub CurrentRegion_Property()
    Range("A1").CurrentRegion.Select
End Sub

이 때 Range("A1") 부분은 굳이 A1 셀이 아니더라도 상관 없습니다. 테이블 내부의 아무 셀이나 지정하면 됩니다. 그냥 현재 영역만 덜렁 선택하는 예제는 별로 재미가 없으니까 현재 영역의 외곽에 실선을 그려보면 재미가 있을까요?

말 그대로 B3:E7 영역의 모든 행들(그러니까 결국은 지정한 영역 내의 모든 셀들)에 'Test' 라는 문자열을 채우게 됩니다. 만약 특정한 행 전체에 어떤 값을 입력하려면 다음과 같이 표현합니다.

Sub CurrentRegion_Property_2()
    Range("A1").CurrentRegion.BorderAround Weight:=xlMedium
End Sub

지정한 범위에 테두리선을 그릴 때에는 BorderAround 메서드를 사용하고 선의 굵기는 Weight 인수를 통해 지정합니다. 앗! 이 시점에서 이런 탄식이 어디선가 들려오는 듯 합니다.

'이런 것을 어떻게 다 외워서 사용한단 말인가?'

절대로 머리 싸매고 외울 필요가 없습니다. 그것은 일부 천재들이나 할 법한 짓(?)이랍니다. 우리는 매크로 기록기를 사용하여 괘선을 그리는 과정을 기록한 다음, 작성된 코드를 보고, '아, 이런 경우에는 이런 메서드나 속성을 기록하는 군! 그러니까 이 부분을 이렇게, 저 부분을 저렇게... 고치기만 하면 되겠네?' 하고 느끼기만 하면 됩니다.

현재 영역에 괘선을 그리는 것도 하고 보니 별로 재미가 없습니다. 그렇다면 응용력을 조금 발휘해서... 표의 타이틀 부분을 제외한 영역에만 색상을 지정하는 것을 만들어 볼까요? 그렇게 하려면 CurrentRegion 속성 외에도 Offset, Resize 속성 등을 조합해서 사용해야 합니다. 다음 코드를 잘 보세요.

Sub CurrentRegion_Property_3()

 

    Range("A1").CurrentRegion.Select

    MsgBox "현재 영역을 선택하였습니다",,"www.iExceller.com"

 

    Selection.Offset(1,0).Select

    MsgBox "현재 영역 중에서 타이틀 부분을 제외하였습니다",,"www.iExceller.com"

 

    Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count).Select

    MsgBox "이제 색칠을 합니다.",, www.iExceller.com"

    Selection.Interior.ColorIndex = 44

 

End Sub

위 코드를 실행하면 그림과 같은 결과가 나타납니다. 한결 재미있지요? ^^


UsedRange 속성

CurrentRegion 속성을 사용하면 특정한 셀에 인접해 있는 영역을 구할 수는 있습니다만, 떨어져 있는 영역에 대해서는 접근할 수 없습니다. 다음과 같이 떨어져 있는 영역을 포함하여 '워크시트 중에서 사용된 모든 영역'을 선택하려면 UsedRange 속성을 이용하면 됩니다. 여기서 한 가지 유의할 점! 앞에서 설명드린 CurrentRegion 속성은 Range 오브젝트의 똘마니 속성인데 비해 UsedRange 속성은 Worksheet 오브젝트에 딸린 속성인 점에 주의하시기 바랍니다. 즉, Range("A1:E100").Select 와 같은 형태로는 사용할 수 없다는 얘기입니다.

Sub UsedRange_Property()
    ActiveSheet.UsedRange.Select

    MsgBox "현재 시트의 UsedRange는 " & Selection.Address & "입니다."
End Sub
 

위에서 소개해 드린 코드들은 작업의 진행 상황을 시각적으로 보여드리기 위해 불필요한 구문들이 다소 들어 있습니다. 실제 프로그래밍에서 이렇게 했다가는 재떨이 날아올 수 있으니까 기본적인 원리를 파악하신 다음, 코드를 최적화 해 보시기 바랍니다.

다음 시간에 또...


Previous

Next

Creative Commons License