엑셀에는 여러 가지 오브젝트가 있고 무엇 하나 안 중요한 것이 없습니다만, 프로그래밍 할 때 가장 활용도 높은 오브젝트는 지지난 강의부터 배우고 있는 Range 오브젝트입니다. 이번 시간에는 Range 오브젝트를 생성하는 방법 중 CurrentRegion과 UsedRange 속성에 대해 알아보겠습니다.
CurrentRegion 속성
CurrentRegion이란 '셀 포인터가 놓여 있는 위치를 중심으로 하여 빈 행과 빈 열로 둘러싸인 영역'을 말합니다. 좀 다르게 표현하자면, '현재 선택된 셀을 중심으로 상하좌우 방향으로 인접해 있는 영역'을 의미합니다. 먼 소린가 하는 분들을 위해... 다음 그림을 보세요.
A1 셀의 CurrentRegion은?
셀 포인터가 A1 셀에 위치하고 있습니다. 이 경우 CurrentRegion, 즉 현재 영역은 어디가 될까요? 위쪽과 왼쪽으로는 더 이상 갈 곳이 없고, 오른쪽과 아래쪽 방향으로 빈 행과 빈 열이 나올 때까지 주욱 따라가 보면 G열 그리고 8행을 만나게 됩니다. 따라서 A1 셀의 CurrentRegion은 빈 행/열을 만나기 바로 전까지 영역인 A1:F7 영역이 됩니다.
A1 셀의 CurrentRegion은 A1:F7
특정 셀의 현재 영역에 접근하려면 CurrentRegion 속성을 사용하면 됩니다. 다음 코드를 실행하면 A1 셀의 현재 영역을 선택합니다.
Sub CurrentRegion_Property()
Range("A1").CurrentRegion.Select
End Sub
CODE
Range("A1") 부분을 적당한 셀로 지정하면 됩니다. 그냥 현재 영역만 덜렁 선택하는 예제는 별로 재미가 없으니까 현재 영역의 외곽에 실선을 그려보면 재미가 있을까요? A1 셀의 현재 영역(B3:E7)에 괘선을 그리려면 다음과 같이 표현합니다.
Sub CurrentRegion_Property2()
Range("A1").CurrentRegion.BorderAround Weight:=xlMedium
End Sub
CODE
지정한 범위에 테두리선을 그릴 때에는 BorderAround 메서드를 사용하고 선의 굵기는 Weight 인수를 통해 지정합니다. 이 시점에서 이런 탄식이 어디선가 들려오는 듯 합니다.
'아, 이런 것을 어떻게 다 외워서 사용한단 말인가...'
절대로 머리 싸매고 외울 필요가 없습니다. 그것은 일부 천재들이나 할 법한 짓(?)이랍니다. 우리는 매크로 기록기를 사용하여 괘선을 그리는 과정을 기록한 다음, 작성된 코드를 보고 '아, 이런 경우에는 이런 메서드나 속성을 기록하는 군! 그러니까 이 부분을 이렇게, 저 부분을 저렇게 고치기만 하면 되겠네?' 하고 느끼기만 하면 됩니다.
현재 영역에 괘선을 그리는 것도 하고나서 보니 별로 재미가 없군요. 그렇다면 응용력을 조금 발휘해서, 표의 제목 부분을 제외한 영역에만 색상을 지정하는 것을 만들어 볼까요? 그렇게 하려면 CurrentRegion 속성 외에도 Offset, Resize 속성 등을 조합해서 사용해야 합니다. 다음 코드를 잘 보세요. 이해가 안 되는 부분이 있더라도 스트레스 받지 말고 논리적으로 이해만 하고 넘어가도 됩니다. 앞으로 계속 반복될 거니까요.
Sub CurrentRegion_Property3()
Range("A1").CurrentRegion.Select
MsgBox "현재 영역을 선택하였습니다"
Selection.Offset(1,0).Select
MsgBox "현재 영역 중에서 타이틀 부분을 제외하였습니다"
Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count).Select
MsgBox "이제 색칠을 합니다"
Selection.Interior.ColorIndex = 44
End Sub
CODE
위 코드를 실행하면 그림과 같은 결과가 나타납니다. 한결 재미있지요? (^^)
Rows 속성
UsedRange 속성
CurrentRegion 속성을 사용하면 특정한 셀에 인접해 있는 영역에 접근할 수는 있습니다만 떨어져 있는 영역에는 접근할 수 없습니다. 다음과 같이 떨어져 있는 영역을 포함하여 '워크시트 중에서 사용된 모든 영역'을 선택하려면 UsedRange 속성을 사용하면 됩니다.
Rows 속성
여기서 한 가지 유의할 점! CurrentRegion 속성은 Range 오브젝트의 똘마니(?) 속성인데 비해, UsedRange 속성은 Worksheet 오브젝트에 딸린 속성이라는 점에 주의하시기 바랍니다. 즉, Range("A1:E100").Select 와 같은 형태로는 사용할 수 없다는 얘기입니다.
Sub UsedRange_Property()
ActiveSheet.UsedRange.Select
MsgBox "현재 시트의 UsedRange는 " & Selection.Address & "입니다."
End Sub
CODE
앞에서 소개한 코드들은 작업의 진행 상황을 시각적으로 보여드리기 위해 불필요한 구문들이 다소 들어 있습니다. 기본적인 원리를 파악한 다음에는 불필요한 부분을 제거하여 코드를 최적화 하세요. 실제 프로그래밍에서 이렇게 하면 뜻하지 않게 장수하게 되는 일이 생길 수 있습니다(욕을 다량으로 섭취...).
다음 시간에 또...