VBA에서 현재 영역을 선택할 때는 CurrentRegion이란 속성(Property)을 사용합니다.
아래 파일을 대상으로 작업하겠습니다.
1. 현재 영역 선택
F8셀의 주변 현재 영역을 선택해 보겠습니다.
가. Visual Basic Editor 실행
개발 도구 - Visual Basic을 눌러 VBA 에디터를 실행합니다.
나. 모듈 삽입
current_region.xlsm 아래 Sheet1이 선택된 상태에서 삽입 - 모듈을 눌러 모듈을 삽입합니다.
모듈과 모듈 아래 Module1이 생성됩니다.
메뉴를 누르지 않고 표준 도구 모음에서 사용자 정의 폼 등을 선택하는 콤보 상자 버튼을 누른 후 모듈을 눌러도 모듈이 삽입됩니다.
다. 서브 프로시저 작성
sub Cur_Region1이라고 입력한 후 엔터 키를 누르고,
range("f6").cu까지 입력하면 CurrentRegion이 나열되므로 이동한 후 탭 키를 누릅니다.
그러면 CurrentRegion이 입력됩니다.
그리고 영역을 선택해야 하므로 .(점)을 찍은 후 s까지 입력하면 Select란 명령어(Method)가 표시되므로 이동한 후 탭키를 눌러 입력합니다.
그러면 아래와 같이 F6셀을 기준으로 현재 영역을 선택하라는 명령문이 완성됩니다.
라. 서브 프로시저 실행
실행 메뉴를 누르고 Sub 실행 메뉴를 누르거나, F5키 또는 표준 도구 모음에서 세모 모양의 실행 아이콘을 눌러 서브 프로시저를 실행합니다.
엑셀로 돌아가서 선택된 영역을 확인해야 하므로,
파일 > '닫고 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은 맨 위 끝을 가리킵니다.
맨 오른쪽으로 이동해야 하므로 xlToRight로 이동한 후 탭키를 누르고,
다시 맨 아래로 이동하가 위해 .End(xlDown)을 입력하면
Range(Cell1,[Cell2]) As 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셀까지가 추가로 선택됩니다.
왜 그런가 확인하기 위해, 아래와 같이 a2셀을 기준으로 오른쪽 끝까지와 맨 아래까지를 선택하는 서브 프로시저를 만든 후 실행해서 확인해 보니
Sub Cur_Region8()
Range(Range("a2"), Range("a2").End(xlToRight).End(xlDown)).Select
End Sub
15행까지가 아니라 17행까지 선택됩니다.
워크 시트에서 Shift + Ctrl + 화살표키를 이용해서 오른쪽 끝으로 이동하고, 맨 아래로 이동하면 15행까지만 선택되는데 VBA 오류인 듯합니다.
'EXCEL - VBA' 카테고리의 다른 글
CurrentRegion 속성을 이용한 합계 등 계산(1) (0) | 2023.02.03 |
---|---|
CurrentRegion의 속성 알아보기 (0) | 2023.01.30 |
CurrentRegion(선택된 셀과 연속적으로 연결된 사각 영역) 선택(1) - 워크 시트 (0) | 2023.01.25 |
Aggregate(옵션 적용 집계) 함수(4) - Countif함수로 k값 지정하기 (0) | 2023.01.10 |
구구단 만들기(6) (엑셀 VBA 디버깅 2) (0) | 2022.12.15 |