• 최초 작성일: 2004-12-28
  • 최종 수정일: 2022-07-10
  • 조회수: 94,741 회
  • 작성자: 엑셀러 권현욱
  • 강의 제목: 레인지 개체 생성 (5) ㅡ SpecialCells, End 속성

엑셀러 권현욱

들어가기 전에

갑신년이 가고 2005년 을유(乙酉)년 새해가 얼마남지 않았습니다. 한해 마무리 잘들 하시고, 다가오는 새해에는 바라시는 모든 일들이 이루어지기를 기원합니다.

새해 복 많이 받으세요!



레인지 오브젝트에 대한 마지막 시간입니다. 레인지 오브젝트에 접근하는 방법은 더 있습니다만, 지금까지 소개해 드린 것과 함께 오늘 알려드리는 것까지해서 10여 가지 남짓 되는 속성이나 메서드만 잘 이해하시면 웬만한 것은 거의 이해했다고 생각해도 좋습니다. 자, 눈에 힘을 주고 시작해 볼까요?

이번 강좌도 Exceller의 책 "VBA로 엑셀에 날개달기"에서 인용했습니다.

SpecialCells 메서드

셀(레인지 오브젝트)에는 여러 종류의 정보가 들어갈 수 있습니다. 상수(Constant) 변하지 않는 수가 들어있는 셀, 내용이 아예 들어있지 않은 셀, 수식이 입력되어 있는 셀 등과 같이 말이지요.

이 중에서 특정한 타입의 영역을 선택해야 할 경우에 SpecialCells 메서드를 사용합니다. 이것은 워크시트 상태에서 [편집] - [찾기 및 선택] - [이동 옵션] 메뉴를 클릭하면 나타나는 [이동 옵션] 대화상자를 통해 조작한 것과 같은 기능을 수행합니다.

로드 중...

SpecialCells 메서드로 특정한 조건을 충족하는 셀에 접근하는 것은 [이동 옵션] 대화상자에서 어떤 조건을 지정하여 특정한 셀에 접근하는 것과 같은 과정입니다. SpecialCells 메서드의 기본적인 사용법은 다음과 같습니다.

작업 대상 영역.SpecialCells (Type, Value)

여기에서 Type, value 같은 것을 인수 argument라고 합니다.

Type 인수

상수 셀 타입
xlCelltypeAllFormatConditions 표시 형식이 설정되어 있는 셀
xlCelltypeValidations 유효성 조건이 설정된 셀
xlCelltypeBlanks 빈 문자열이 들어있는 셀
xlCelltypeComments 메모가 들어있는 셀
xlCelltypeConstants 상수가 포함되어 있는 셀
xlCelltypeFormulas 수식이 들어있는 셀
xlCelltypeLastCell 사용된 범위 내의 마지막 셀
xlCelltypeSameFormatConditions 같은 서식을 가진 셀
xlCelltypeSameValidation 같은 유효성 조건을 가진 셀
xlCelltypeVisible 화면에 보이는(표시되어 있는) 모든 셀

Type 인수

상수 셀 타입
xlErrors 에러값
xlLogical 논리값
xlNumbers 숫자값
xlTextValues 문자열값

예를 들어 현재 워크시트에서 데이터가 입력되어 있는 마지막 셀을 선택하려면 다음과 같이 표현합니다.

Sub SpecialCells_Method()
    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
    MsgBox "마지막 데이터 셀 주소는 " & Selection.Address & "이고" & vbCr & _
        "입력된 값은 " & Selection.Value & " 입니다"
  End Sub

CODE

이 코드를 실행하면 아래와 같은 결과가 나타납니다.

로드 중...

기본적인 사용법을 알았으니 이번에는 보다 실용적인 예제를 만들어 볼까요? 시트 내에서 수식이 입력된 셀의 배경색을 노란색으로 칠해 보도록 하지요. 다음 그림처럼 말입니다.

로드 중...

어떻게 하면 위와 같이 할 수 있을까요? 정상적인 예습/복습을 철저히 하고 정규 교과 과정을 제대로 이수하신 분이라면 능히 해결하실 수 있으리라 생각됩니다...는 농담이고, 앞에서 설명드린 SpecialCells_Method 프로시저를 이해한 분이라면 응용할 수 있어야 합니다.

Sub SpecialCells_Method2()
    Dim rngMyRange As Range
    Set rngMyRange = _
        Worksheets("Sheet7").Cells.SpecialCells(xlCellTypeFormulas)
    rngMyRange.Interior.ColorIndex = 6
    MsgBox "수식이 입력된 모든 셀을 노란색으로 표시하였습니다!"
End Sub

CODE

End 속성

End 속성이라고 하니까 뭔지 정확히는 알 수 없지만 '마지막'과 관련된 것이 아닐까 하는 짐작은 어렴풋이 드시지요? 바로 그렇습니다. End 속성은 '영역의 마지막 셀'을 구해주는 속성입니다. 마지막 셀은 알겠는데 '영역의' 마지막 셀이란 무엇을 말하는 것일까요?

짐작하시겠지만, 현재 셀을 기준으로 상/하/좌/우 방향의 맨 끝에 있는 셀을 의미합니다. 말로 하니까 이해가 될듯 말듯 하시지요? 그러실 줄 알고 그림을 준비했습니다.

로드 중...

End 속성

이 시점에서... 수수께끼 하나 내 드릴까요?

"아니, VBA 공부하다 말고 집중력 떨어지게 왠 수수께끼?"

라고 하시겠지요? 다 이유가 있으니까 한번 맞춰 보세요.

집집마다 4개씩 가지고 있는데 동네를 다 털어도 4개 밖에 없고, 온 나라를 다 뒤져도 4개 밖에 없는 것은 무엇일까~요?

그것은 바로... '동서남북'이랍니다. 영역의 마지막 셀도 동서남북과 비슷합니다. 위 그림에서 D8 셀을 기준으로 해서 위쪽 방향 마지막 셀은 D4 셀, 아래쪽 마지막 셀은 D13 셀입니다. 또한 왼쪽으로 마지막 셀은 B8 셀, 오른쪽으로 마지막 셀은 F8 셀입니다. 이것을 컴퓨터(엑셀)가 알아들을 수 있게 VBA 코드로 표현하면 이렇게 됩니다.

Range("D8").End(xlUp).Select
Range("D8").End(xlDown).Select
Range("D8").End(xlToLeft).Select
Range("D8").End(xlToRight).Select

조금 응용을 해 봅시다. 다음 코드를 실행해서 직접 확인해 보시면 아마도 End 속성에 대해서는 더 이상의 설명이 필요 없으리라 생각합니다. 물론 코드를 실행하기 전에 Sheet1에 위 그림과 비슷한 형태의 데이터는 미리 만들어 두어야겠지요?

Sub End_Property()
    Dim rngStart As Range
    Dim strAddress As String
    Set rngStart = Sheets("Sheet1").Range("D8")

    With rngStart.End(xlUp).Select
        strAddress = Selection.Address(rowabsolute:=False, columnabsolute:=False)
        MsgBox "D8 셀의 위쪽 끝 셀인 [" & strAddress & "]셀을 선택하였습니다"
        
        .End(xlDown).Select
        strAddress = Selection.Address(rowabsolute:=False, columnabsolute:=False)
        MsgBox "D8 셀의 아래 끝 셀인 [" & strAddress & "]셀을 선택하였습니다"

        .End(xlToLeft).Select
        strAddress = Selection.Address(rowabsolute:=False, columnabsolute:=False)
        MsgBox "D8 셀의 왼쪽 끝 셀인 [" & strAddress & "]셀을 선택하였습니다"

        .End(xlToRight).Select
        strAddress = Selection.Address(rowabsolute:=False, columnabsolute:=False)
        MsgBox "D8 셀의 오른쪽 끝 셀인 [" & strAddress & "]셀을 선택하였습니다"
    End With
End Sub

CODE

End 속성의 인수 및 단축 키 정리

이동 방향 인수 단축 키(워크시트에서 사용)
위쪽 끝 End(xlUp) Ctrl + ↑
아래쪽 끝 End(xlDown) Ctrl + ↓
왼쪽 끝 End(xlToLeft) Ctrl + ←
오른쪽 끝 End(xlToRight) Ctrl + →

End 속성은 실무에서 어떤 경우에 사용될까요? 여러 가지 경우에 적용할 수 있겠지만 다음과 같이 데이터를 계속 입력할 때 마지막으로 입력된 셀이 어디인지를 파악하는 경우에 흔히 사용됩니다.

Sub End_Property_2()
    Range("A65536").End(xlUp).Offset(1, 0).Select
    MsgBox "데이터가 새로 입력될 위치는 " & Selection.Address & "입니다"
End Sub

CODE

이 코드를 실행한 결과는 아래와 같습니다. 셀 포인터의 위치를 눈여겨 보세요.

로딩 중...

뿐만 아니라 특정한 영역을 지정하여 색상을 지정할 때에도 사용할 수 있습니다.

로딩 중...

위 그림처럼 급여 부분에 접근하여 서식을 지정해 주는 코드입니다.

Sub End_Property_3()
    Range(Range("E2"), Range("E2").End(xlDown)).Select
    Selection.Interior.ColorIndex = 3
    Selection.Font.ColorIndex = 2
    MsgBox "급여 영역의 데이터에 대한 서식 변경을 완료하였습니다!"
End Sub

CODE

이렇게 해서 올해 강의는 모두 마칩니다. 새해에는 더욱 알찬 내용을 가지고 다시 찾아오겠습니다. 모쪼록 2005년에는 웃을 일이 많이 생기기를 기원해 봅니다.

아듀 2004년, 아듀 여러분~~