Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 셀 영역 선택하는 여러가지 방법

엑셀(Excel)/VBA
반응형

VBA 코딩을 하면서 제일 먼저 해야 될 일이 작업할 데이터를 가져오는 것입니다. 가장 많이 쓰이는 소스이기도 합니다. 오늘은 셀 영역을 선택하고 데이터를 가져오거나 셀을 병합하는 등 셀 영역을 다루는 방법에 대해 자세히 알아보도록 하겠습니다.  

 

 

1. 현재 워크시트의 셀을 Cells(), Range() 로 선택하는 방법

 

Cells() Range() 함수로 셀을 선택하는 방법입니다. 가장 일반적으로 사용하는 함수 입니다. Cells() 은 특정 영역을 지정할 때 가로와 세로 위치를 숫자로만 사용합니다. Range() 는 열번호와 행번호를 조합해서 영역을 지정합니다.

 

'' Cells 첫 번째 셀 선택
ActiveSheet.Cells(1, 1).Select
 
'' Range 두 번째 셀 선택
ActiveSheet.Range("a2").Select
 
Sheets("Sheet1").Cells(3, 1).Select
 
Sheets(1).Cells(4, 1).Select

 

 

 

2. 현재 워크시트의 셀 범위를 선택하는 방법

 

* 다른 워크시트나 통합 문서의 셀 영역을 선택하는 것도 아래 Range 함수 사용법과 동일합니다.

 

1번에서 설명한 내용은 셀 하나를 지정하는 방법이었습니다. 이번에는 영역을 지정할 때 사용하는 방법입니다. Range 함수로 셀 하나를 가리킬 때는 “a1” 와 같이 입력하고 영역을 지정할 때는 “a2 : b3” 처럼 콜론과 함께 사용합니다. 그리고 Range 함수에서 영역을 지정하는 또 다른 방법은 Cells() 함수와 조합하는 것입니다. 첫 번째 인수에는 영역의 왼쪽 상단과 두 번째 인수로 오른쪽 하단 끝에 있는 셀을 지정해서 영역을 선택할 수 있습니다

 

'' Range 영역의 왼쪽 상단과 오른쪽 하단 끝에 셀을 지정한다.
ActiveSheet.Range(Cells(1, 1), Cells(9, 1)).Select
 
ActiveSheet.Range("A1:B9").Select
               
'' Range 첫 번째 인수가 왼쪽상단, 두 번째가 오른쪽하단 모서리가 된다.
ActiveSheet.Range("A1", "B9").Select

 

 

 

3. 동일한 통합 문서 내에서 다른 워크시트의 셀을 선택하는 방법

 

다음은 동일한 통합 문서 내에서 다른 워크시트의 셀을 참조해서 값을 가져오는 방법입니다. Application.Goto 함수를 사용해서 “Sheet2” 라는 이름의 워크시트로 이동한 뒤 Cells() Range() 함수로 데이터를 가져올 수 있습니다. 두 번째 방법은 데이터를 가져오고 싶은 워크시트를 활성화 시키는 것입니다. Activate 속성은 사용자가 해당 워크시트를 클릭한 것과 같습니다. 활성화 시킨 워크시트는 ActiveSheet 로 접근할 수 있습니다.

 

'' GoTo 를 이용해서 두 번째 워크시트에 접근한다.
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(1, 1)
 
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("A2"))
 
'' 두 번째 워크시트를 활성화 시킨 후 접근한다.
Sheets("Sheet2").Activate
ActiveSheet.Cells(3, 1).Select

 

 

 

4. 다른 통합 문서의 워크시트 셀을 선택하는 방법

 

다른 엑셀 문서를 참조하는 방법입니다. 통합문서 내에서 워크시트를 참조할 때와 같은 함수인 Application.Goto 를 사용합니다. 단지 인수로 사용하는 값이 파일의 경로라는 것입니다. 해당 Workbooks() 로 통합문서의 경로를 지정해 주고 워크시트와 셀 영역을 차례대로 접근하시면 됩니다.

 

Application.Goto _
    Workbooks("통합 문서2.xlsx").Sheets("Sheet1").Cells(7, 2)
 
Application.Goto _
    Workbooks("통합 문서2.xlsx").Sheets("Sheet1").Range("B7")

  하지만 참조하려는 문서가 열려 있어야 합니다. 닫혀 있는 문서를 여는 소스는 없기 때문에 닫혀 있는 문서를 열고자 한다면 아래 그림과 같은 런타임 에러가 나게 됩니다.

 

아래 그림은 열려 이는 통합 문서2 에 지정한 셀 영역으로 이동한 모습입니다.

 

 

5. 이름 정의된 영역 선택하는 방법

 

셀에 접근하는 또 다른 방법은 이름 정의된 영역을 이용하는 것입니다. 만약 “data” 라는 이름으로 정의된 영역이 있다고 할 때 아래 소스처럼 Range Application.Goto 를 이용해서 선택할 수 있습니다. 아주 심플하죠.

 

Range("data").Select
 
Application.Goto "data"

먼저 영역을 “data” 라는 이름으로 정의합니다.

 

그리고 Range Application.Goto 를 이용하면 셀 번호를 일일이 입력하지 않더라도 한 방에 영역이 선택됩니다.

 

 

6. 현재 선택한 셀에서 상대 경로의 셀을 선택하는 방법

 

Offset 은 상대 경로를 지정하는 함수 입니다. ActiveCell 개체는 현재 사용자가 선택한 셀을 기준으로 합니다. 첫 번째 인수는 열의 이동 개수를 말하며, 두 번째 인수는 행의 이동 개수를 나타냅니다. 값이 마이너스이면 왼쪽 방향과 위쪽으로 이동하게 되겠죠.  

 

ActiveCell.Offset(5, -1).Select

 워크시트에서 선택한 셀을 기준으로 행과 열을 이동시켜 선택할 수 있습니다. offset 함수를 사용하면 되는데 첫 번째 인수는 행을 나타내며 두 번째 인수는 열을 나타냅니다. “+” 는 오른쪽 방향과 아래를 나타내며 “-“ 는 그 반대로 움직입니다. 만약 셀 영역을 벗어나는 값이면 에러가 납니다.

 

 

 


7. 지정한 셀을 기준으로 상대 경로의 셀을 선택하는 방법

 

6번과 달리 상대 경로를 지정할 때 현재 선택한 셀이 아닌 특정 셀 영역을 부터 시작하는 방법입니다. ActiveSheet.Cells() Range() 함수를 이용해서 영역을 지정한 후 Offset 함수를 이용하면 됩니다.

 

ActiveSheet.Cells(1, 1).Offset(5, 1).Select
              
ActiveSheet.Range("A1").Offset(5, 1).Select

 

 

 

8. 선택한 영역을 재정의 하는 방법

 

데이터를 가공하는 과정에서 영역에 들어가 있던 값들이 수정될 수 있습니다. 아래 샘플처럼 기존에 9칸이던 영역을 5칸 더 늘이고 싶다면 어떻게 해야 할까요? 먼저 Select 함수를 이용해서 영역을 선택합니다. 그리고 선택된 영역에서 Resize() 함수를 이용하면 됩니다. 두 개의 인수는 차례 대로 행의 숫자와 열의 숫자를 입력합니다.

 

Range("data").Select
 
Selection.Resize(Selection.Rows.Count + 5, _
        Selection.Columns.Count).Select

 

 

 

9. 두 개의 영역을 합치는 방법

 

다음은 셀의 선택 영역을 합치고 싶을 때 사용하는 함수입니다. Application.Union 함수를 사용하면 인수로 입력한 영역을 합칠 수 있습니다. 합치고 싶은 영역은 Union 함수의 인수로 2개이상 입력이 가능합니다.

 

Application.Union(Range("A1:A9"), Range("B1:B9")).Select

 

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀(Excel) VBA – 워크시트 개체를 이용해서 시트 관리하는 방법
엑셀 VBA 워크시트, 셀 선택되었을 때 실행되는 이벤트 함수 구현하기
엑셀 VBA 셀 영역 선택하는 여러가지 방법
엑셀 VBA 여러 시트 데이터 합치기
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기

 

 

10. 두 영역이 겹치는 지역을 선택하고 싶을 때

 

다음은 영역을 합치는 것이 아닌 두 영역의 교차 지점은 찾아내는 것입니다. Untion 함수 대신 Intersect() 함수를 사용하면 아래 그림처럼 겹쳐진 영역 “B1:B9” 찾아내 줍니다.

 

Application.Intersect(Range("A1:B9"), Range("B1:C9")).Select

 

 

 

11. 연속되는 데이터 열의 마지막 셀을 선택하고 싶을 때

 

워크시트에 값을 추가하고 싶은데 기존 데이터의 끝에 넣어야 합니다. 그러려면 시트에서 데이터 끝이 어디인지 알아야 합니다. 그 때 이용하는 것이 End 함수와 xlDown 상수 입니다. xlDown 은 아래 방향을 가리킵니다. 만약 xlUp 이 들어가면 “A1” 셀이 선택되겠죠.

 

ActiveSheet.Range("a1").End(xlDown).Select

 

 

 

12. 연속되는 데이터 열 전체를 선택하고 싶을 때

 

다음은 동적으로 계속해서 변하는 워크시트의 데이터 영역을 선택하는 방법입니다. 매번 시트에 데이터가 변경이 된다면 영역의 크기가 매번 달라집니다. 이런 영역을 선택하고자 할 때 Range() 함수와 End() 를 이용합니다. 마지막 셀의 위치를 알 수 있기 때문에 아래와 같은 소스 조합이 가능한 것이죠.  

 

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
 
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
        End(xlDown).Address).Select

 

 

 

13. 데이터 영역 전체를 선택하고 싶을 때

 

12번에서는 데이터가 연속으로 있는 열 영역을 선택하는 방법이었습니다. 이번에는 한 행이나 열이 아닌 사각 영역 전체를 선택하는 방법입니다. CurrentRegion 함수는 데이터의 행과 열에 연속된 데이터 영역을 가져올 때 사용합니다.

 

ActiveSheet.Range("a1").CurrentRegion.Select
 
ActiveSheet.Range("a1", _
        ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select

 

 

 

14. 각 행을 별도로 구분해서 선택하고 싶을 때

 

이번에는 전체 영역이 아닌 각 행을 구분해서 선택하는 방법입니다. 연속된 영역이 아닌 구분된 영역은 Union 함수를 이용하시면 됩니다. 개별 영역을 Range 객체에 담은 후 Union 의 인수로 넘기고 Select 를 실행합니다.

 

StartRange = "A1"
EndRange = "D1"
 
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a, b).Select

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀(Excel) VBA – 워크시트 개체를 이용해서 시트 관리하는 방법
엑셀 VBA 워크시트, 셀 선택되었을 때 실행되는 이벤트 함수 구현하기
엑셀 VBA 셀 영역 선택하는 여러가지 방법
엑셀 VBA 여러 시트 데이터 합치기
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기
반응형
Posted by 녹두장군

댓글을 달아 주세요