- 최초 작성일: 2000-05-16
- 최종 수정일: 2026-09-30
- 조회수: 11 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: RANGE오브젝트에대하여
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
e-Business, e-Commerce니 하는 전자상거래가 요즘 기업들의 주관심사이지요? 사실 전자상거래는 그다지 어려운게 아니라고 생각합니다 적어도 시스템적인 개념에 있어서는…(잘 몰라서 그런가?)
전자상거래에 있어 가장 중요한 것은 Infra-structure, 즉 얼마나 탄탄한 하부구조를 잘 갖추고 있느냐 없느냐 하는 것입니다. 대표적 인터넷 기업인 아마존이 홈페이지가 멋있다거나 전자시스템이 잘 갖추어져서 그렇게 좋은 평가를 받지는 않을 것입니다.(물론 아마존의 온라인 시스템이 엉성하다는 얘기는 절대 아닙니다. 다만 시스템적인 측면만 놓고 보자면 아마존보다 월등한 기업이 비일비재하다는 얘기지요)
가장 중요한 것은 "소비자가 원하는 책을 얼마나 정확한 시간에 품절없이, 적정한 가격에 제대로 전달을 하느냐" 하는 Off-line적인 인프라가 탄탄하다는 것이지요.
지난 몇 강좌동안 계속해서 딱딱한 이론적인 측면만 강조해서 설명을 드리고 있습니다. 혹시 이 파일을 보시는 분 중에서 '이거 뭐 VB를 갈쳐 준대놓고 맨날 오브젝트가 어떻고, 프로퍼티가 어떻고, 프로퍼티가 오브젝트 뒤에 붙어서 또다른 오브젝트를 만들고… 이런 거나 자꾸 설명하니 이러다가 언제 프로그램 한번 짜보나?' 하는 의구심을 가지는 분이 없으신지? 머리 아프게 이론적인 설명을 드리는 이유도 바로 이런 인프라, VB에 대한 하부구조를 다지기 위한 작업이라고 생각하시기 바랍니다. 그런 의미에서 오늘 하루만 더 골치아파보고(?) 다음 강좌부터는 직접 프로그래밍 하는 것에 대해 설명을 드리겠습니다.
RANGE오브젝트에대하여
핵심 요약: Range 오브젝트 참조 3가지
Range 오브젝트는 Range, Cells, Offset 프로퍼티로 만들 수 있으며, 상황에 따라 편한 방식을 골라 쓰면 됩니다.
- Range: Range("A1:B10")처럼 주소 문자열로 범위를 지정합니다.
- Cells: Cells(행, 열)처럼 번호로 셀을 지정합니다.
- Offset: Range 오브젝트에서 행·열만큼 이동한 범위를 지정합니다.
Step 1: Range 오브젝트란?
지난 시간에 몇가지 핵심용어에 대한 설명을 드렸습니다. 오브젝트(개체), 프로퍼티(속성), 메서드(방법) 등에 대한 개념이 생기셨는지 모르겠습니다.
자, 오늘은 오브젝트, 그 중에서도 가장 중요한 Range 오브젝트에 대해 살펴보도록 하겠습니다. 이 Range 오브젝트의 개념만 잘 이해하면 나머지 오브젝트에 대한 것은 거저먹기 입니다. 아마도 엑셀로 어떤 작업을 하면서 이 Range 오브젝트에 접근을 하지 않고서는 불가능한 경우가 대부분일 것입니다. Range 오브젝트는 워크시트 오브젝트의 하위 오브젝트로 시트 내에 한 개 또는 복수개의 셀들로 이루어져 있습니다.
range 오브젝트는 다음의 3가지 속성(프로퍼티)을 통해 대상영역을 참조합니다. (머리가 슬슬 아파오시지요? 프로퍼티를 통해 range 오브젝트의 대상영역을 참조한다? 프로퍼티, 메서드, range? 헷갈리기만 하지요? 첨엔 다 그런거니까 자꾸자꾸 들여다 보세요)
- 워크시트 또는 Range 오브젝트의 Range 프로퍼티를 통해
- 워크시트 오브젝트의 Cells 프로퍼티를 통해
- Range 오브젝트의 Offset 프로퍼티를 통해
Range 오브젝트가 생성이 됩니다. 하나씩 살펴보도록 하지요.
Step 2: Range 프로퍼티
먼저, range 프로퍼티를 사용해서 range 오브젝트를 생성할 수 있습니다. 열 받지요? 어떨 때는 range 오브젝트 랬다가 또 어떨 때는 range 프로퍼티라고 했다가? 마구 헷갈리시지요?(^^;) 아래를 보세요.
Worksheets("Sheet1").Range("a50").Value=1
여기서 Range("a50").Value 즉 Range 오브젝트 뒤에 Value라는 프로퍼티가 붙어서 Range 오브젝트를 생성하게 되는 것입니다. 위의 구문은 "Sheet1의 a50셀에 1이라는 값을 써라"라고 하는 명령입니다.
ActiveSheet.Range("A1:B10").Value=2
오브젝트명 앞에 Active라는 것을 붙이면 현재 활성화된 오브젝트를 가리키게 되는 것입니다. ActiveSheet라는 것은 Sheet 오브젝트 중에서 현재 활성화가 된 시트를 지정하는 것이지요. 그러므로 위의 명령은 현재 (활성화된)시트의 A1에서 B10셀을 2라는 값으로 채워넣는 것입니다.
위의 문장을 아래와 같이 써줄 수도 있습니다.
Range("A1","B10")=2
즉 ActiveSheet라는 것을 생략하면 디폴트값으로 ActiveSheet가 지정이 됩니다.
Range("A1, A3, A5, B7, B10")=100
이것은 불연속적인 복수개의 셀에 대해 100이라는 값을 넣어줍니다.
Step 3: Cells 프로퍼티
Range 오브젝트를 생성한다는 것은 달리 말하자면 범위를 지정한다는 것이겠지요? 범위를 지정하는 또 한가지 방법은 Cells 프로퍼티를 사용하는 것입니다. Range 오브젝트와 마찬가지로 Cells 프로퍼티는 Worksheet 오브젝트와 Range 오브젝트 중에서 범위를 지정할 때 사용할 수 있습니다.
Worksheets("Sheet1").Cells(2, 1) = "AAA"
Cells(2, 1)에서 앞의 2는 행번호, 뒤의 1은 열번호를 각각 나타냅니다. 즉 행이 2니까 2, 열이 1이니까 A열, 따라서 A2셀을 나타내는 것이지요. 그렇다면 Cells(10,10)이라고 하면 어느 셀을 나타내는 것일까요? 그렇지요! 행이 10이니까 10번째 행, 열도 10이니까 A, B,…, J열, 그러니까 J10셀을 나타내지요?
요약하자면 Cells(2, 1)은 Range("a2")와 같고
Cells(10,10)은 Range("J10")과 같은 것입니다.
그렇다면 이런 의문이 또 들지요? "하나로 통일을 시키든지 하지 뭣 때문에 골치 아프게 두가지로 쓰고 난리야?" 정답은 Range("…")로 쓰는 것이 편할 경우도 있고, Cells( , )로 쓰는 것이 편할 때도 있기 때문입니다. 이것은 앞으로 강좌를 보시다보면 저절로 알게되는 부분이고…
또 이렇게 사용하는 방법도 있습니다.
Range("a1:e10").Cells(10)="AAA"
이것은 A1에서 E10 셀 중에서(총 50개의 셀이지요) 10번째 셀, 즉 E2 셀에다가 AAA라는 값을 뿌려 줍니다. 한 가지 주의할 점은 셀을 카운팅할 때 맨 위쪽→오른쪽, 그 다음에 아래쪽…의 순서로 셀을 센다는 것입니다.
Step 4: Offset 프로퍼티
Offset 프로퍼티도 range/cells 프로퍼티와 마찬가지로 range 오브젝트를 생성합니다. 그렇지만 다른 메서드와는 달리 Offset 프로퍼티는 Range 오브젝트에만 적용을 할 수가 있습니다. 전형적인 Offset 프로퍼티 사용형태는 아래와 같습니다.
object.Offset(rowOffset, columnOffset)
rowOffset는 이동할 행수, columnOffset는 이동할 열 수를 각각 나타냅니다.
ActiveCell.Offset(1, 2).Value = 1000
이라고 하면 현재 셀에서 행방향(아래)으로 1간, 열방향(오른쪽으로) 2간 이동한 다음 1000을 대입하겠지요?
ActiveCell.Offset(-1, 0).Value = "ABC"
이와 같이 마이너스 값을 지정해 줄 수도 있습니다. 즉 위로 한간 이동한 다음(열은 0니까 변동이 없지요) ABC라는 문자열 값을 대입하라는 명령입니다.
Offset 프로퍼티는 For ~ Next나 Do ~ Loop와 같은 순환문에서 매우 유용하게 사용되는 프로퍼티 입니다. 물론 나중에 설명을 드리겠지만… 아마도 이번 강좌가 제일로 머리가 아플 것이고 다음 부터는 조금 쉬워 질 것입니다.
마무리
다음 시간에…
정리 — Range 오브젝트 참조 방법 요약
| 프로퍼티 | 예시 | 의미 |
|---|---|---|
| Range | Range("A1:B10")=2 | A1:B10 셀에 2 입력 |
| Cells | Cells(2, 1) | A2 셀 (행 2, 열 1) |
| Range.Cells | Range("a1:e10").Cells(10) | 위→오른쪽→아래 순서로 10번째 셀 (E2) |
| Offset | ActiveCell.Offset(1, 2) | 현재 셀에서 아래 1, 오른쪽 2 이동 |
자주 묻는 질문 (FAQ)
Q1. ActiveSheet를 생략하면 어떻게 되나요?
디폴트값으로 ActiveSheet, 즉 현재 활성화된 시트가 지정됩니다.
Q2. Cells(10,10)은 어느 셀인가요?
행이 10, 열이 10번째(J열)이므로 J10 셀입니다.
Q3. Offset 프로퍼티는 어디에 사용할 수 있나요?
다른 프로퍼티와 달리 Range 오브젝트에만 적용할 수 있습니다.
마치며
이번 강좌가 가장 머리가 아플 것이고 다음부터는 조금 쉬워집니다. 다음 시간부터는 직접 프로그래밍을 해 보겠습니다.