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 통합 문서 문서가 열리는 순간 기능 구현하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 Excel VBA 개발 도구를 이용해서 버튼 삽입하고 함수 연결하기 (2) | 2023.11.11 |
---|---|
엑셀 VBA Select Case 문 사용해서 다중조건 처리하기 (0) | 2023.11.09 |
엑셀 VBA IF 지시 구문 사용하는 방법, IF … ELSEIF … ELSE … ENDIF (4) | 2023.09.20 |
엑셀 VBA 파일 다이얼로그 사용하기 (0) | 2023.09.17 |
엑셀 VBA 년도, 월 비교해서 발생 횟수 조회하는 방법 (1) | 2023.08.09 |
엑셀 VBA 이미지 셀 크기에 자동으로 삽입하는 매크로 만들기 (6) | 2023.08.08 |
엑셀 VBA 시트 테두리 선 그리는 방법 (0) | 2023.08.07 |
엑셀 VBA 정규표현식 사용하는 방법, 공백 문자 제거하기 (0) | 2023.07.20 |