Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Range|Cells|Rows|Columns|ActiveCell |Range|Select|Selection|Cells|Rows|
|Columns|Activate|ActiveCell|Offset|Resize|

Range속성으로 접근하기

범위에 Range속성으로 접근하는 방법은 아래와 같다
직접실행창에서

Range("1:1").Value=3
와 같이 입력하면 현재 활성화된 시트의 첫번째행에 모두 3이라는 숫자가
입력된다
초보님들은 대개 매크로를 돌려서 얻어지는
Range("1:1").Select
Selection.Value=3
이라고 기록된것을 그대로 사용하려고 하는데
Select하지 않아도 맨위의 표현과 같이 해당범위에 접근된다

ABCDEFGH
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Range("A1")="Excel"A1셀
Range("A1:F7")="Excel"A1셀에서 F7까지의 범위
Range("A5:E9,C9:F14")="Excel"두개의 떨어진 범위에 접근
Range("A1") =5
Range("A2:A10")="=R[-1]C[0]+5"
A열전부
Range("1:1")="5"첫번째행 전부
Range("C:D")="=Int(RAND()*100)+1" C열~F열까지
Range("1:5")="33"1행~5행까지
Range("1:1,5:5,10:10")=51행,5행,10행범위
Range("A:A,C:C,F:F")="5"A열,C열,F열범위


Range속성은 아래와 같이 여러오브젝트의 속성으로 얻어진다
직접실행창에서 실행해보시기 바란다

Application.Range("A1:B3").Value=3
Activesheet.Range("A1:B3").Value=333
Range("A1:B3").Value=444

모든 표현이 현재 활성화된 워크시트의 A1셀에서 B3셀까지의
범위에 접근하게 하는것이니..
앞의 Application이나 ActiveSheet는 생략해도 되는것이다
또한 Value속성은 Default속성이라고 하여
아무런 속성이름도 주지 않았을때 기본적으로 접근하는 속성으로서
안 붙여 주어도 된다 아래와 같이

Range("A1:B3")=444

현재 Sheet1이라는 워크시트가 활성화되어있고
Sheet2라는 워크시트의 A1셀에서 B3셀까지 접근하고 싶다면
Worksheets("Sheet2").Range("A1:B3")=33
라고 워크시트를 명시하여야 찾아 간다

Range속성은 Range오브젝트의 속성으로도 사용된다
아래 구문을 직접실행창에서 실행해보시기 바란다

Range("B2:F10").Range("A1:C3")=3

Cells속성으로 접근하기

직접실행창에 아래와 같이 입력후 Enter키를 쳐보시기 바란다
시간이 좀 걸릴것으로 생각하시고..

Cells=3

현재 활성화된 워크시트의 모든 셀에 3이라는 숫자가 전부
입력되는것을 볼것이다
65536행*256열매트릭스에 모두 3이라는 숫자가 들어 가니까..
메모리도 많이 먹고 버벅거릴것이니 안해보는것이 좋다
아무튼 Cells는 워크시트의 모든 셀(Range오브젝트)에 접근하는 속성이다
Cells속성이 편리한것은 아래와 같은 구문을 실행해 보시기 바란다

ABCDEFGH
1
2
3
4
5
6
7
8
9
10
11
12
13


Sub LoopAround()
Dim iX As Integer,iY As Integer
For iX=1 To 9
   For iY=1 To 7
      Cells(iX,iY)=iX*iY
   Next
Next
End Sub

순환문도 이해하면서 Cells속성으로 범위에 접근하는것을 보았다
Range속성과는 다르게 숫자로서 범위를 찾아다닐때 편리하다
만약 Cells(100)이라고 할때는 시트의 첫번째 행에서 열방향으로
100번째셀을 의미한다

ABCDEFGH
1
2
3
4
5
6
7
8
9
10
11

Range("A1:H10")범위내에서 10번째셀에 접근한다
하지만 Range("A1:F10").Cells(10)이라고 한다면

만약 Range("A1:F10").Cells(47)이라고 한다면
Range("A1:F10")범위에서 벗어난 노랑색에 접근한다는 점!!

Range속성이 앞으로 가기도 하고 Cell속성이 앞으로 가기도 하고
앞뒤로 상호참조하여도 유효한 접근방법이 된다
아래의 예를 하나,하나 보시기바란다

ActiveSheet.Cells.Range("B2:C4")=3
Range("B2:E10").Cells(2,2)=3
Range(Cells(2,2),Cells(4,5))=3

Range속성으로 얻어진 범위에서 Cells속성으로 재접근하기도 하고
Cells속성에서 얻어진 범위에서 Range속성으로 재접근하기도 한다
Range속성이나 Cells속성이나 모두 Range오브젝트를 얻어내는 속성이다
아래와 같은것도 유효한 표현식이다
이렇게 표현할일은 없지만..

Range("B5:E11").Range("A1").Range("A5")=3

결론은 범위의 접근은 앞의 표현식에서 얻어낸 범위를 기준으로
새로운 범위에 재접근되는것이다
아니 뭘 이렇게 복잡하게 하지??!#@@
아직은 참..미련한놈들이네..@#@그냥 곧바로 가면 되지!!!
좀더 가보아야 이유를 안다

Rows,Columns속성으로 접근하기

범위에 접근하는 방법은 참으로 많기도 하다
Range오브젝트는 엑셀의 핵심오브젝트이니까..당연히 다양하다
열단위나,행단위로 접근할때는 Rows속성이나 Columns속성이 편리하다
Cells=3/전체셀에 3값을 주고..
Rows=3/전체행에 3값을 주고.. Columns=3/전체열에 3값을 주는것
위의 3가지 표현식은 결국은 전체시트의 모든 셀에 3을 입력하는것이다
위의 3가지를 직접실행창에서 실행하지마시기 바란다
시간이 한참걸리는 쓸데없는 짓이니까..
Cells속성은 셀단위로 접근하는것이고
Columns속성이나 Rows속성은 열이나 행단위로 접근하는것이다
Range(Cells(1),Cells(256))은 Rows(1)이나 마찬가지 접근방법이다
Rows(2).Cells(1)은 Range("A2")와 같다
Columns(1).Cells(2)또한 Range("A2")와 같다
Rows("1:2")=3는 1번행과 2번행모두 3이 입력된다
Columns("A:C")=3는 A,B,C열에 모두 3이 입력된다
기본원칙을 알면 주어진 문제의 상황에 따라 변화무쌍하게 접근할수 있다

여러개의 셀이 선택되어도 그중의 활성화된 셀은 오직 하나밖에 없다

위에서 Select메소드가 많이 활용되었고
이것은 실은 엑셀프로그래밍을 이해하는데 도움이 되도록
하나,하나 선택하여 보여드리기 위한것이고 실제로는
Select를 특별한 경우가 아니고는 쓸 필요가 없다
또한 여기에서 설명하려는 Activate메소드도 역시 마찬가지이다

ABCDEFGH
1
2
3
4
5
6
7
8
9
10


Dim rRange As Range, rX As Range
Dim iX As Integer
Set rRange = Range("B2:F10")
rRange.Select
MsgBox ("Range(""B2:F10"")이 선택된 셀이고..")
For Each rX In rRange.Cells
    iX = iX + 1
    rX.Activate
    MsgBox "Range(""B2:F10"").Cells(" & iX & ")셀이 현재 활성화셀"
Next

실제로 프로그래밍에서는 위와 같이 선택하거나
활성화시키거나 할 필요가 없다
그러나 초보님들의 경우 매크로에서 기록을 하고
기록된 코드를 약간 수정하고 사용하려 할때
Select,Activate등 마우스로 실제 선택하면서 기록된
내용이 그대로 남는것이다
앞으로 이곳에서 자주 Select,Activate를 사용하지만
이해를 돕기 위한 것이고..실제 소루션을 개발할때는
사용할일이 별로 없다는 점을 잘 감안하시기 바란다

아래 화일에서 접근한 범위를 다시 범위를 확장하고
접근한 범위를 기준으로 이동하고 하는 일들을 해보자
또한 선택된 범위에서 활성화된 범위는 오직 하나의 셀
뿐이라는 것이 무엇을 의미하는지 보도록 하자
워크시트함수중 OFFSET함수를 기억할것이다
OFFSET함수는 엑셀오브젝트의 속성 Offset과 Resize의 두 기능을
한꺼번에 갖고 있다고 할수 있겠다
바꾸어 말해서 워크시트함수인 OFFSET함수와 같은 접근을
하기 원한다면 Offset속성과 Resize속성을 같이 사용하여야
하는것이다

또한 Applicaiton오브젝트에서 단축적으로 활성화된 오브젝트에
접근하는 속성중의 하나인 ActiveCell속성은 여러개의 선택된 범위중
활성화된 셀에 접근시킨다
또한 워크시트오브젝트를 새로 삽입하거나 생성하면 항상
A1셀이 ActiveCell이 된다


Difference Between Select And Activate

아래 화일은 초보님들이 Select와 Activate를 남용하여 사용하는 경우와
Select,Activate한번도 사용하지 않고 같은 목적의 일을 수행하는것을 본다

Sample Showing Difference Using Select And Not Using