EXCEL - VBA

엑셀에서 전체 범위 선택하기 - VBA

별동산 2023. 3. 15. 08:35
반응형

엑셀에서 전체 범위를 선택하는데 CurrentRegion 속성(Property)을 이용할 수 있는데, 중간에 빈 셀 등이 있으면 CurrentRegion이 아니라 UsedRange 속성을 이용해야 합니다.
 

 

전체범위선택하기(VBA).xlsx
0.01MB


 
 
위 엑셀 파일을 열면 연속된 데이터 시트와 

 
단절된 데이터 시트 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 메뉴가 미묘한 차이를 가지고 있습니다.

반응형