배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   value, 값
제목:   with or without VALUE
     
 

STEP

  STEP> with or without VALUE


일상생활 중에는 생략해도 상관없는 것이 있습니다. 누군가와 대화를 하면서 주어나 목적어를 말 안 해도 상대방은 알아서 이해를 하죠. 집 주소를 적을 때도 대한민국~으로 시작할 필요는 없습니다. (예전에 필자는 동사무소에서 등본을 떼면서도 “xx시 xx구~”까지 적는 고지식함을 가졌습니다. 요즘은 신분증만 보여주면 되더군요)

프로그래밍의 세계에서는 생략 가능한 것이 있습니다. 폼 컨트롤 중에서는 Label컨트롤의 Caption이 그러하고, TextBox컨트롤의 Text속성이 그러합니다. 또한 Range개체의 Value속성이 그러한 부류 중 하나인데, 이것은 디폴트 속성이기 때문입니다.

Dim rng     As Range

         Set rng = Range(Sheet1.Cells(2, 2), Sheet1.Cells(4, 4))
         rng = "value생략"

위의 코드는 rng.Value 대신 rng를 사용해도 됩니다. 또한 다음과 같은 코드 역시 Value가 없어도 상관없죠.

         Sheet1.Cells(1, 1).Value = 3
         Sheet1.Cells(2, 1) = 3

         Debug.Print Sheet1.Cells(1, 1).Value
         Debug.Print Sheet1.Cells(2, 1)

Cells(1, 1).Value와 Cells(1, 1)은 분명히 다른 존재입니다. Cells(1, 1).Value는 Range개체의 속성이고 Cells(2, 1)는 Range개체 자체가 됩니다. 평소에는 잘 의식하지 못하지만 둘의 차이는 Collection개체에 집어놓고 [조사식]창에서 관찰해보면 알 수 있습니다.

Collection개체변수인 clt를 [조사식]에 추가하고 다음과 같이 코드를 한 줄줄 한 줄 실행해나가면서 [조사식]창을 관찰해 보았습니다.

         Dim clt     As New Collection

         clt.Add Sheet1.Cells(1, 1).Value
         clt.Add Sheet1.Cells(2, 1)

처음 Add할 때는 Value속성을 명시하였고, 다음  Add할 때에는 Value속성을 생략했습니다. 다음의 [조사식]창에서 여러분이 눈 여겨볼 부분은 [Item 1]의 [형식]컬럼에는 Variant/Double, [Item 2]의 [형식]컬럼에는 Variant/Object/Range가 있음을 볼 수 있을 겁니다.

이는 [Item 1]에는 Double형 숫자 값이 저장되어 있지만, [Item 2]에는 Range개체가 저장되어 있다는 의미입니다. Range 개체이기 때문에 [Item 2]하단에는 Range개체의 여러 가지 속성이 부속되어 있습니다. 이것은 ADO Fields개체의 Value속성도 마찬가지입니다.

필자의 생각에는 비록 이러한 속성들을 생략할 수 있지만 그래도 명시해주는 것이 좋습니다. rng = "value생략"이라는 문장에서 rng를 문자열 변수로 오해할 수 있을테니까 말이죠.

 
  Tip>개체 연결하기
 Range 개체와 Collection개체를 연결하기

clt가 Collection개체변수라고 가정하고, clt.Add Sheet1.Cells(1, 1)는 Collection개체에 Range개체를 입력하는 것입니다. 이런 경우 Collection 변수 값을 변경하면 자동으로 Range개체의 값이 변경됩니다. 다음과 같은 코드를 실행해보자.

Dim clt As New Collection

         '// A1셀에 3을 입력합니다.
         → Sheet1.Cells(1, 1).Value = 3
         '// A1셀을 컬렉션변수에 추가합니다.한다
         → clt.Add Sheet1.Cells(1, 1)
         ' // 컬렉션에 추가된 아이템값을 3에서 6으로 변경합니다.
         → clt.Item(1) = 6
         '// 변경확인을 위해 컬렉션 아이템값을 출력해봅니다.
         → Debug.Print clt.Item(1)
         '// 동시에 A1셀의 값도 3에서 6으로 변경되었습니다.
         '// 이를 확인하기 위해 A1셀값을 출력해봅니다.
         → Debug.Print Sheet1.Cells(1, 1).Value