EXCEL VBA Range와 Cells로 셀을 선택하고 움직이자(Offset과 Resize 사용법)
VBA는 엑셀의 자체 내장 프로그램이라 엑셀의 시스템의 영향을 강력하게 받습니다.
정확하게는 엑셀을 활용하는 것이 VBA의 존재이유라고 할 수 있죠.
오늘은 셀을 이동하고 선택하는 코드들에 대해서 알아보겠습니다.
1. RANGE(셀주소)
- 셀의 주소 혹은 범위를 나타냅니다.
RANGE("A1") 혹은 RANGE("A1:A10") 형식으로 ""(따움표) 안에 주소 이름을 넣습니다.
주소를 텍스트로 입력하는 방식입니다.
텍스트 형식의 변수로 바로 사용할 수 있습니다. 아래의 아주 간단한 예시를 보겠습니다.
Sub cell_ex()
A = "A1:D10" '범위
Worksheets("sheet1").Range(A).Select '범위를 선택하라
End Sub
결과는 아래와 같습니다. - A1:A10을 선택했습니다.
2. CELLS(행번호, 열번호)
- CELLS(행번호, 열번호), 셀의 위치값을 숫자로 넣어 셀을 선택한다.
처음의 행이고 두번째가 열입니다.(X, Y) 좌표계가 익숙한 저는 가끔 헷갈리기도 함니다.
행번호는 왼쪽의 바의 번호 그대로고 열번호는 ABC순서대로 번호로 메겨집니다.
예) CELLS(3, 2) → B3, CELLS(5, 3) → C5 가 됩니다.
두개의 명령어를 비교하면 RANGE("셀주소") ← 셀주소가 TEXT 형식이라서 연산이 안됩니다.
A1+1라고 입력하면 에러가 발생합니다. 하지만 (B2:C10)처럼 범위를 입력하기는 쉽습니다.
CELLS 값을 숫자로 넣기 때문에 CELLS(X + 3, Y + 2) 처럼 연산을 통해 이동할 수 있습니다.
하지만 CELLS는 범위를 넣는 기능이 지원되지 않습니다.
그래서 이런 것들이 가능하도록 필수적인 옵션 명령어 OFFSET과 RESIZE에 대해서 알아 보도록 하겠습니다.
3. OFFSET(행번호, 열번호)
- 셀을 행번호와 열번호만큼 이동해 줍니다.
B2에 있는 칸을 E3로 입력해 봅시다. 행과 열이 가로세로만 구별되면 금방 익숙해집니다.
행번호와 열번호가 숫자로 들어가니 사칙연산도 가능하고 편리합니다.
Sub cell_ex()
Worksheets("sheet1").Range("B2").Select 'B2를 선택합니다.
Worksheets("sheet1").Range("B2").Offset(0, 0).Select 'B2에서 안움직이고 그대로 있습니다.
Worksheets("sheet1").Range("B2").Offset(2, 3).Select 'B2에서 행 2개 열 3개 이동해서 E4가 됩니다.
Worksheets("sheet1").Cells(2, 2).Select 'B2를 선택합니다.
Worksheets("sheet1").Cells(2, 2).Offset(0, 0).Select 'B2에서 안움직이고 그대로 있습니다.
Worksheets("sheet1").Cells(2, 2).Offset(2, 3).Select 'B2에서 행 2개 열 3개 이동해서 E4가 됩니다.
End Sub
4. RESIZE(행번호, 열번호)
- 주어진 셀에서 행번호와 열번호만큼의 범위를 지정합니다.
주의할 점은 RESIZE는 크기에 관한거라 1이 최소입니다.
0이나 음수를 지정하면 에러가 납니다.
Sub cell_ex()
Worksheets("sheet1").Range("B2").Select 'B2를 선택합니다.
Worksheets("sheet1").Range("B2").Resize(1, 1).Select 'B2에서 안움직이고 그대로 있습니다.
Worksheets("sheet1").Range("B2").Resize(2, 3).Select 'B2에서 행 2개 열 3개만큼을 선택합니다.
Worksheets("sheet1").Cells(2, 2).Select 'B2를 선택합니다.
Worksheets("sheet1").Cells(2, 2).Resize(1, 1).Select 'B2에서 안움직이고 그대로 있습니다.
Worksheets("sheet1").Cells(2, 2).Resize(2, 3).Select 'B2에서 행 2개 열 3개만큼을 선택합니다.
End Sub
5. OFFSET과 RESIZE
이 두개는 같이 사용할 수 있습니다.
이동 후에 범위를 선택할 수 도 있지만 반대로 할 수도 있습니다.
자유도가 상당히 높습니다.
Sub cell_ex()
Worksheets("sheet1").Range("B2").Offset(2, 3).Resize(3, 2).Select
Worksheets("sheet1").Cells(2, 2).Offset(2, 3).Resize(3, 2).Select
End Sub
여기까지를 익히면 셀의 이동은 자유자재입니다.
셀만 이동한다고 뭐가 되는건 아니지만 VBA의 기초가 되는 시작점이니 다루어 보았습니다.
그외에도 이동에 도움이 되는 옵션은 조금씩 더 있습니다.
하지만 오늘 기능으로 일단 다 구현이 가능할 것입니다.
필요에 따라서 다음에 모아서 다루어 보도록 하겠습니다.