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

엑셀(Excel)/VBA

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

 

환경: Microsoft Excel 2013

 

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

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

 

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

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

 

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

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

 

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

 

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

 

Application.Goto _

    Workbooks("통합 문서2.xlsx").Sheets("Sheet1").Cells(7, 2)

 

Application.Goto _

    Workbooks("통합 문서2.xlsx").Sheets("Sheet1").Range("B7")

 

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

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

 

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

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

 

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

 

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

 

Range("data").Select

 

Application.Goto "data"

 

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

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

 

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

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

 

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

 

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

 

ActiveCell.Offset(5, -1).Select

 

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

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

 

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

 

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

 

ActiveSheet.Cells(1, 1).Offset(5, 1).Select

              

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

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

 

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

 

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

 

Range("data").Select

 

Selection.Resize(Selection.Rows.Count + 5, _

        Selection.Columns.Count).Select

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

 

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

 

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

 

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

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

 

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

 

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

 

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

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _

        End(xlDown).Address).Select

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

 

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

 

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

 

ActiveSheet.Range("a1").CurrentRegion.Select

 

ActiveSheet.Range("a1", _

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

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

 

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

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

 

Posted by 녹두장군