엑셀에서 전체 범위를 선택하는데 CurrentRegion 속성(Property)을 이용할 수 있는데, 중간에 빈 셀 등이 있으면 CurrentRegion이 아니라 UsedRange 속성을 이용해야 합니다.
위 엑셀 파일을 열면 연속된 데이터 시트와
단절된 데이터 시트 2개가 있습니다.
1. Range.CurrentRegion
단절된 데이터 시트를 선택한 상태에서 진행합니다.
먼저 Developer > Visual Basic을 눌러 Visual Basic Editor로 들어간 다음
전체범위선택하기(VBA).xlsx가 선택된 상태에서 Insert > Module을 눌러
Modules 아래에 Module1을 삽입니다.
연속된 데이터 시트의 경우는 A1셀에서 CurrentRegion속성을 구하려면
아래와 같이 매크로를 작성한 다음
Sub catchcurrentregion_address()
MsgBox Range("a1").CurrentRegion.Address
End Sub
VB Editor에서 catchcurrentregion_address 매크로 안에 커서를 넣고 실행 아이콘(F5 키)을 누르거나
맨 왼쪽 'View Microsoft Excel' 아이콘을 눌러 엑셀로 돌아간 후
Developer > Macros를 누르고,
Macro name에서 catchcurrentregion_address를 더블 클릭하거나 선택하고 오른쪽 Run 버튼을 눌러 실행합니다.
그러면, $A$1:$K$1이라고 Ctrl + A키를 눌렀을 때와 같은 결과가 나옵니다.
Ctrl + A키인지 화살표키를 누른 것인지 확인하기 위해
확인 버튼을 누른 후 VB Editor를 엽니다.
매크로에서 a1을 a2로 수정한 후 실행하면
Sub catchcurrentregion_address()
MsgBox Range("a2").CurrentRegion.Address
End Sub
$A$1:$K$5라고 Ctrl + A키를 누른 것과 결과가 같음을 알 수 있습니다.
https://lsw3210.tistory.com/entry/%EC%97%91%EC%85%80%EC%97%90%EC%84%9C-%EC%A0%84%EC%B2%B4-%EB%B2%94%EC%9C%84-%EC%84%A0%ED%83%9D%ED%95%98%EA%B8%B0 참고
2. ActiveSheet.UsedRange
UsedRange의 Object는 ActiveSheet이고, Region이 아니라 Range로 다른 점 주의해야 합니다.
아래와 같이 매크로를 작성한 후 실행하면
Sub catchUsedRange_address()
MsgBox ActiveSheet.UsedRange.Address
End Sub
커서가 데이터 영역 안에 있지 않더라도 $A$1:$K$10으로 작업 영역이 표시됩니다.
확인 버튼을 눌러 매크로를 종료합니다.
키보드로 선택할 때는 Shift + Ctrl + End키를 눌러야 하는데, 매크로로 간단히 선택할 수 있습니다.
3. 연속된 데이터 시트에서는 결과가 같음
연속된 데이터 시트를 클릭해서 선택한 다음 catchcurrentregion_address 매크로를 실행하든 catchUsedRange_address 매크로를 실행하든 결과는 $A$1:$K$10로 같습니다.
4. UsedRange의 특이성
가. Delete키로 내용을 지운 경우
단절된 데이터 시트를 선택하고,
A열부터 K열까지를 복사한 다음 M1셀을 클릭한 후 붙여 넣기를 합니다.
그러면 A열부터 K열까지의 내용이 M열 이후에 붙여집니다.
이 상태에서 catchUsedRange_address 매크로를 실행하면 UsedRange로 $A$1:$W$10이 표시됩니다.
이 상태에서 M을 클릭해서 M열을 선택한 다음 W열까지 끌어 M열부터 W열까지 선택한 후 Delete 키를 눌러 내용을 지운 다음 catchUsedRange_address 매크로를 실행하면 내용이 없는데도 작업한 흔적이 있기 때문에 UsedRange로 여전히 $A$1:$W$10이 표시됩니다.
나. Delete 메뉴로 열을 삭제한 경우
이 상태에서 M을 클릭해서 M열을 선택한 다음 Shift + Ctrl + → 를 눌러서 맨 오른쪽까지 선택한 다음
마우스 오른쪽 버튼을 누르고, Delete 메뉴를 눌러
M열부터 마지막 열까지를 삭제합니다.
그리고, catchUsedRange_address 매크로를 실행하면 아까와는 달리 $A$1:$K$10로 표시됩니다.
다. Shift + Ctrl + End와 UsedRange의 차이점
다시 A열부터 K열까지의 내용을 M열에 붙여넣은 다음, M열부터 W열까지 선택하고 마우스 오른쪽 버튼을 누른 후 Delete메뉴를 눌러 옅을 삭제하고,
A1셀을 클릭한 다음 Shift + Ctrl + End키를 누르면 열이 삭제됐는데도 A1셀부터 W10셀까지 범위가 선택됩니다.
그러나, catchUsedRange_address 매크로를 실행하면 A!셀에서 K10셀까지가 UsedRange로 표시돼서 결과가 다릅니다.
그러나, 한번 catchUsedRange_address 매크로를 실행하고, Shift + Ctrl + End키를 누르면 종전과는 달리 A!셀에서 K10셀까지 범위가 선택됩니다.
Shift +Ctrl + End키와 UsedRange가 약간 다르고, Delete 키와 컨텍스트 메뉴(마우스 오른쪽 버튼을 누르면 나오는 메뉴)의 Delete 메뉴가 미묘한 차이를 가지고 있습니다.
'EXCEL - VBA' 카테고리의 다른 글
일정한 간격으로 된 값 합계 구하기 - 매크로 (2) | 2023.03.21 |
---|---|
일정한 간격으로 된 값 합계 구하기 - 사용자 정의 함수 (2) | 2023.03.20 |
Range.AutoFilter Method(8) - 필터된 영역에 붙여넣기(2-3) (0) | 2023.03.13 |
Range.AutoFilter Method(2) - Field, Criteria, Operator, SubField, VisibleDropDown (2) | 2023.03.12 |
Range.AutoFilter Method(1) - expression.AutoFilter (2) | 2023.03.11 |