EXCEL - VBA

CurrentRegion(선택된 셀과 연속적으로 연결된 사각 영역) 선택(2) - VBA

별동산 2023. 1. 26. 08:49
반응형

VBA에서 현재 영역을 선택할 때는 CurrentRegion이란 속성(Property)을 사용합니다.

Range.CurrentRegion Property


아래 파일을 대상으로 작업하겠습니다.

current_region.xlsm
0.01MB

 

 

1. 현재 영역 선택

F8셀의 주변 현재 영역을 선택해 보겠습니다.

가. Visual Basic Editor 실행

개발 도구 - Visual Basic을 눌러 VBA 에디터를 실행합니다.

개발도구 - Visual Basic Editor 실행

 

나. 모듈 삽입

current_region.xlsm 아래 Sheet1이 선택된 상태에서 삽입 - 모듈을 눌러 모듈을 삽입합니다.

모듈 삽입하기


모듈과 모듈 아래 Module1이 생성됩니다.

모듈과 그 아래 Module1이 삽입된 화면


메뉴를 누르지 않고 표준 도구 모음에서 사용자 정의 폼 등을 선택하는 콤보 상자 버튼을 누른 후 모듈을 눌러도 모듈이 삽입됩니다.

콤보 박스를 이용해 모듈 삽입하기

 

다. 서브 프로시저 작성

sub Cur_Region1이라고 입력한 후 엔터 키를 누르고,
range("f6").cu까지 입력하면 CurrentRegion이 나열되므로 이동한 후 탭 키를 누릅니다.

CurrentRegion이 제시된 목록 화면


그러면 CurrentRegion이 입력됩니다.

그리고 영역을 선택해야 하므로 .(점)을 찍은 후 s까지 입력하면 Select란 명령어(Method)가 표시되므로 이동한 후 탭키를 눌러 입력합니다.

Select가 제시된 목록 화면

그러면 아래와 같이 F6셀을 기준으로 현재 영역을 선택하라는 명령문이 완성됩니다.


라. 서브 프로시저 실행

실행 메뉴를 누르고 Sub 실행 메뉴를 누르거나, F5키 또는 표준 도구 모음에서 세모 모양의 실행 아이콘을 눌러 서브 프로시저를 실행합니다.

Sub .프로시저 실행 방법


엑셀로 돌아가서 선택된 영역을 확인해야 하므로,
파일 > '닫고 Excel로 돌아가기' 메뉴를 누르거나, Alt + Q 또는 표준 도구 모음에서 엑셀 아이콘을 누릅니다.

엑셀로 돌아가는 방법


그러면 엑셀 워크 시트로 돌아가는데, A2셀부터 i15셀까지 선택되었습니다.
그러나, F8셀과 연속되지 않은 K열부터 O열까지는 선택되지 않습니다.

 

2. 현재 영역 범위 지정

현재 영역을 CurrentRegion이라는 속성을 이용해 선택하는 것이 훨씬 편리하지만,
A2셀에서 i15셀까지 선택한다고 하면

새로운 sub 프로시저명 Cur_Region2란 이름아래
Range("a2:i15").Select
라고 a2셀에서 i15셀까지 직접 주소를 입력해서 선택하라는 명령문을 작성할 수 있습니다

 

3. End 속성 이용하여 오른쪽 끝, 아래 끝까지 선택

a2:i15라고 직접 입력하지 않고, End 속성을 이용해서 오른쪽 끝으로 이동한 다음 아래 끝으로 이동해서 현재 영역을 선택할 수도 있습니다.

Cur_Region2 서브 프로시저를 복사한 후 붙여 넣고 Cur_Region3로 이름을 바꿉니다.

그리고, 연속된 범위를 지정할 때는
Range 오브젝트 안에 범위 2개를 입력해야 하므로,
Range(Range("a2"), Range("a2").End( 까지 입력하면
xl로 시작하는 엑셀 상수가 표시되는데, xlToLeft는 왼쪽 끝, xlToRight는 오른쪽 끝, 안 보이는데 xlDown은 맨 아래 끝, xlUp은 맨 위 끝을 가리킵니다.

End 속성(xl 상수)

맨 오른쪽으로 이동해야 하므로 xlToRight로 이동한 후 탭키를 누르고,
다시 맨 아래로 이동하가 위해 .End(xlDown)을 입력하면
Range(Cell1,[Cell2]) As Range라고 입력 형식이 표시됩니다.

Range 입력 방법


괄호를 닫은 다음 .se라고 입력하면 Select가 표시되므로 탭키를 눌러 입력합니다.

그리고 위 서브 프로시저를 실행하면, A2셀부터 A2셀에서 맨 오른쪽, 맨 아래로 이동한 셀까지 범위가 연속적으로 선택됩니다.
실행한 후 엑셀로 돌아가서 확인하면 현재 영역이 선택되어 있습니다.


이렇게 하는 것이 A2:I15를 입력하는 것보다는 더 유연한 프로그램인데 CurrentRegion이 제일 낫습니다.

4. 두 개 이상의 현재 영역을 독립적으로 선택

워크시트를 보면 크게 두 개의 영역으로 나눠져 있는데, 두 개 영역을 모두 선택하려면 Union 메소드를 이용합니다.

아래와 같이 A2셀의 현재 영역과 K2셀의 현재 영역을 Union으로 묶어서 선택(Select)하는 명령을 작성한 후 실행하면

Sub Cur_Region4()
    Union(Range("a2").CurrentRegion, Range("k2").CurrentRegion).Select
End Sub


아래와 같이 두 개 영역이 선택됩니다.

두 개의 현재 영역이 선택된 화면

 

5. 두 개 이상의 현재 영역을 연속적으로 선택

Union이 아니라 Range 오브젝트를 이용하면

Sub Cur_Region5()
    Range(Range("a2").CurrentRegion, Range("k2").CurrentRegion).Select
End Sub


아래와 같이 현재 영역 2개가 연속적으로 선택됩니다.

두 개의 현재 영역이 연속적으로 선택된 화면

 

5. 두 개 이상 영역의 교차 영역 선택

아래와 같이 두 영역이 교차된 경우 Ctrl + Shift + *키를 누르면


입력된 데이터가 있는 최대 높이와 너비를 기준으로 사각형 모양으로 현재 영역이 선택됩니다.

 

가. 교차 영역 선택하기 1

이때 위 열1부터 열9까지의 데이터와 아래 열7부터 열11까지의 데이터가 교차하는 영역의 데이터만 추출하려면 intersect 메소드를 이용하는데, 영역을 직접 입력합니다.

Sub Cur_Region6()
    Intersect(Range("a2:i15"), Range("g12:k17")).Select
End Sub

 


Intersect를 Full Name으로 쓰려면 Application.Intersect라고 써야 하지만 Application은 생략 가능하므로 Intersect만 썼습니다.

위 서브 프로시저를 실행하면 두 영역에서 교차된 영역만이 선택됩니다.

두 개 영역의 교차 영역이 선택된 화면
두 개 영역의 교차 영역이 선택된 화면


나. 교차 영역 선택하기 2
End 속성을 이용하여 A2셀에서 맨 오른쪽까지와 맨 아래쪽까지 선택하고, G12셀을 기준으로 맨 오른쪽까지와 맨 아래쪽까지 선택한 후 교차 영역을 선택하면
※ 아래 코드에서 _는 명령문의 아래줄과 윗줄이 연속된다는 의미, 다시 말해 한 줄이라는 의미입니다.

Sub Cur_Region7()
    Intersect(Range(Range("a2"), Range("a2").End(xlToRight).End(xlDown)), _
        Range(Range("g12"), Range("g12").End(xlToRight).End(xlDown))).Select
End Sub


위와 달리 G16셀부터 i17셀까지가 추가로 선택됩니다.

Intersect가 아니라 Range를 이용했더니 잘못된 결과가 나옴


왜 그런가 확인하기 위해, 아래와 같이 a2셀을 기준으로 오른쪽 끝까지와 맨 아래까지를 선택하는 서브 프로시저를 만든 후 실행해서 확인해 보니

Sub Cur_Region8()
    Range(Range("a2"), Range("a2").End(xlToRight).End(xlDown)).Select
End Sub


15행까지가 아니라 17행까지 선택됩니다.

Range를 이용해 오른쪽 끝, 맨아래까지 선택한 영역


워크 시트에서 Shift + Ctrl + 화살표키를 이용해서 오른쪽 끝으로 이동하고, 맨 아래로 이동하면 15행까지만 선택되는데 VBA 오류인 듯합니다.

Shift + Ctrl + 화살표키를 이용했을 때 선택되는 영역

 

current_region(완성).xlsm
0.02MB

반응형