나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     조회:  2994
제목:   [강좌] Range 개체와 Cells 개체
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007): 2016

* 아래줄에 질문을 작성하세요 >>

매크로에서 키보드 아랫키를 눌러 셀 한칸 아래로 내려가고 싶은데 구문을 어떻게 작성해야하나요?
레코드 해보니 아래로 내리면 Range("A7").Select 이런식으로 셀 선택으로 기록되네요..
==============[정승원님 글에 대한 답변입니다]==============

매크로 기록기는
현재의 상태를 기준으로 대체로 상수값("A7")으로 기록하기 때문에,
이를 일반화하기 위해서는 적절히 변형해야 하고,
그러기 위해서는 Range 개체나 Cells 개체의 용법을 공부해야 합니다.

Cells(r, c) - r행 c열을 가리킵니다.

ActiveCell - 현재 활성화되어 있는 셀을 가리킵니다.

Range(주소 또는 범위 이름) - 문자열로 주어진 주소나 범위 이름에 
                              대응하는 범위를 가리킵니다.

Range(Cells(r1, c1), Cells(r2, c2))
   - r1행 c1열의 셀과 r2행 c2열의 셀을 대각선의 양 꼭지점으로 하는 
      직사각형 영역을 가리킵니다.
   예를들어 Range(Cells(2, 3), Cells(5, 7))은
   Range("C2:G5")와 동일함

Selection - 현재 선택되어 있는 영역
            (한 개의 셀만 선택된 경우에는 ActiveCell과 같음)
            을 가리킴

한편, Cells 개체나 Range 개체는 온점(.)으로 구분하여
상위 개체인 WorkSheets나 WorkBooks에 종속될 수도 있고
다른 Cells 개체나 Offset 개체에 종속되거나 거느릴 수 있습니다.

즉, Cells(2, 3)은 현재 활성화된 시트의 C2 셀을 가리키지만
WorkSheets("D1").Cells(2, 3)은
D1이란 이름을 가진 시트의 C2 셀을 가리킵니다.

마찬가지로 Range("DATA")는 현재 통합문서에서
DATA라는 이름으로 정의된 범위 영역을 가리키지만
WorkBooks(2).Range("DATA")는
두 번째로 열려 있는 통합문서에서 정의된 DATA 범위입니다.

Cells(4, 3).Offset(-1, 2)는
Cells(4, 3) 즉, C4 셀을 기준으로 하여
위로 1칸, 오른쪽으로 2칸 이동한 곳에 있는 셀
즉, E3 셀을 가리키게 됩니다.

ActiveCell.Offset(1, 0)은
현재 활성화되어 있는 셀을 기준으로
아래로 1칸(좌우로는 제자리) 이동한 곳의 셀
- 이제 답이 보이지요?

Offset 개체에서 행번호가 음수면 위쪽
열번호가 음수이면 왼쪽으로 가고,
0이면 제자리입니다.

Cells(4, 3).Cells(0, 3)와 같이 쓸 수도 있습니다.
이 때, 두 번째 Cells 개체의 행, 열번호는
Offset 개체처럼 상하좌우로 이동한 칸 수를 나타내는데
기준이 0이 아니고 1이라는 게 다릅니다.
즉, Cells(4, 3).Cells(0, 3)은
Cells(4, 3).Offset(-1, 2)과 같습니다.

이런 점에서 보면 종속하여 상대위치를 정하는데는
Cells 개체보다는 Offset 개체가 덜 헷갈리죠.

Range 개체가 기준이 되는 경우에는
범위의 좌상단 셀을 기준 위치로 잡습니다.
예) Range("C4:G10").Offset(-1, 2)은
     Cells(4, 3).Offset(-1, 2)과 같습니다.

이 때, Offset 개체에 의해 이동하여 가리키게 되는 셀은
원래의 범위("C4:G10")에서 벗어나도 상관 없습니다.
즉, 위 예의 경우도 E3 셀은 원래의 범위 밖에 있는 셀이지만
오류를 발생하는 것은 아닙니다.

다만, 워크시트의 범위를 벗어나면 오류가 되니 주의해야 합니다.
즉, Cells(4, 3).Offset(2, -3)은 오류가 발생합니다.

이와 같은 셀 개체에 대하여
역시 온점(.)을 찍고 나서 적절한 속성이나 메소드를 지정할 수 있습니다.

즉, Cells(2, 3).Value는 C2 셀에 저장된 값을 반환해주고
Cells(2, 3).Text는 C2 셀이 현재 겉으로 보이는 값
(셀서식에 의해 표시되는 값)을 문자열로 반환해줍니다.

Cells(2, 3).Locked 값을 조사하면 그 셀이 보호(잠금) 상태인지
해제 상태인지 알 수 있고
Cells(2, 3).Locked = True
라고 값을 설정해 주면 그 셀을 보호상태로 만들 수 있습니다.

해당 셀(범위)를 선택하는 것은 Select 메소드
활성화시키는 것은 Activate 메소드를 사용합니다.

즉, 질문의 해답은
ActiveCell.Offset(1, 0).Activate 또는
ActiveCell.Offset(1, 0).Select
라고 합니다.

ActiveCell.Offset(0, -1).Activate는
왼쪽 화살표 키를 구현하는 명령이 되겠지요.

단일 셀을 대상으로 할 경우
Activate와 Select의 결과는 같습니다.

워크시트에서 B2부터 D7까지 마우스로 드래그하여 선택하면
Selection은 B2:D7이고
ActiveCell은 B2가 되지요.

이 상황을 VB로 구현하면
Range(Cells(2,2),Cells(7,4)).Select
Cells(2,2).Activate
입니다.
 
[불량 게시물 신고]  
정승원상세한 설명 너무 감사드립니다.
차근차근 해보도록 하겠습니다!
05-09 (13:41)
삭제 ■신고
        
  

작성일 : 2018-05-09(13:36)
최종수정일 : 2018-05-09(13:36)
 


 ◎ 관련글

  제 목   작성자   날짜
아래셀 선택하기 매크로 정승원 2018-05-09
[강좌] Range 개체와 Cells 개체 조삿갓 2018-05-09