지식은 공유되었을 때 그 힘을 발휘한다.



AutoCAD ActiveX 맛보기 강좌(12)

선택된 셀들을 더하여 보여주기
selection속성과 cells속성에 대해서 알았으니 이제 선택된 셀들을 더하면 되겠지요? 더하는 것은 반복하는 것이니 지난번에 익힌 for문을 사용하면 될것 같다고 생각하신 분은 매우 눈치가 빠른 분이군요. 그렇습니다. for문을 사용해서 더하면 됩니다. 하지만 선택된 셀이 몇개인지 알아야 for문을 사용할텐데, 그것을 어떻게 알아낼까요? 사용자가 10개를 선택할 수도 있고 5개를 선택할 수도 있는 문제이기 때문에 우선 사용자가 선택한 셀의 갯수를 알아내는 게 급선무 입니다. 각자 help를 이용해서 한번 찾아볼까요? 일단 selection부터 시작하지요.



생각보다 썰렁한 도움말이네요. 단지 중요한 것은 selection속성은 application의 속성이고 range개체를 돌려준다는 말입니다. selection은 개체가 아니라 개체를 돌려주는 속성이었습니다. 그래서 ?selection이라고 치면 $A$1:4A$10과 같이 range를 돌려주었던 것입니다. 그렇다면 어떻게 해서 selection.cells()와 같이 제일 앞에 쓰였을까요? 개체 다음에 속성이 쓰여야 한다고 했는데.. 아래쪽을 읽어보면 개체없이 사용하면 appliction개체에 적용된다.라는 말이 있습니다. 그렇다면 선택된 셀의 갯수를 알아내는 것은 selection이 돌려준 reange개체에서 찾아보아야겠군요. range를 클릭합니다. 도움말은 친절하게도 range개체로 연결을 시켜놓았군요. range개체는 지난번에도 한번 뒤져보았었죠? 다시한번 보면.. 아래그림과 같습니다.



어떤 range의 cell갯수를 돌려주는 것은 아무래도 속성같다는 느낌이 오지요? 그래서 속성을 뒤져보기로 합니다. 아직은 갯수를 돌려주는 속성의 이름을 모르니까 한개한개 읽어보도록 하지요.. 어떤 속성이 있나 익힐겸.. 주욱 내려가다보면 count란 놈이 보입니다. 앗.. count.. 뭔가 우리가 찾고 있는 속성인듯한 느낌이.. 얼른 count항목을 더블클릭해봅니다. 그러면 아래와 같은 count속성에 대한 도움말이 나타납니다.





앗. 역시나 썰렁한 도움말이네요..(사실 저도 처음 찾아보았슴다^^) 암튼 개체수를 반환한다구.. 어쩌구 저쩌구 라고 써있는 것보니까. 맞는 것 같군요. 적용대상에 혹시 range가 있나 볼까요? 역시 있습니다. 그렇다면 selection.count란 구문이 성립된다는 것이네요.. 직접실행창에서 확인을 해보도록하지요. 물론 엑셀에서 몇개의 셀을 선택한 후에 직접실행창에서 확인을 해야겠지요? 위에서 다섯개를 선택한 후에 직접실행창에서 ?selection.count라고 입력해봅니다. 그러면 기특하게도 5라는 숫자를 돌려줍니다. 음..
  

이제 선택된 셀의 갯수도 알아냈고.. 더하기만 하면 되는군요.. 이제까지 대부분을 직접실행창에서 테스트를 해보았습니다만, 이제는 프로그램을 직접만들어야 하기 때문에 모듈내에서 작업을 해야겠지요. 우선 sub구문으로 프로그램명을 정의합니다. 저는 sumsel이라고 붙여보았습니다. end sub는 vb editor가 자동으로 붙여주지요? 이제 sub와 end sub사이에 문장을 써넣야겠는데.. 어디부터 시작할까요?

Sub sumsel()
End sub

당연히 셀의 갯수를 머져 구해야겠죠?

Sub sumsel()
  icount = selection.count
End sub

이렇게 icount라는 변수에 선택된 셀의 갯수를 구해놓았습니다. 그 다음은 for문으로 셀들을 더하면 되겠지요? 선택된 셀들의 첫셀부터 마지막 셀까지요. 선태된 셀들의 첫셀은 selection.cells(1)이고 마지막은 selection.cells(icount)이겠지요? 그리고 더하기한 결과값을 sum이라는 변수 안에 넣기로 합니다. 그리고 그 값을 0으로 해둡니다. 그러면 sum = sum + selection.cells(1) 하면 첫번째 셀의 값이 sum에 들어가게 되겠죠? 그리고 두번째 셀의 값을 더하기 우해서는 sum = sum + selection.cells(2)하면 될것입니다. 그런식으로... sum = sum + selection.cells(icount)까지 하면.. 선택된 셀이 모두 더해지는 것이죠... 어떤가요? for문을 이용해서 하실 수 있겠죠? 변하는 것은 cells()의 괄호안의 숫자입니다. 이것을 변화시키면서 하면 되는데.. 처음1로 시작해서 icount로 끝나면 되겠지요? 이것을 for문으로 표현하면 for i=1 to icount가 되겟죠.. 그리고 for문 안에 sum에 더하는 기능을 넣으면 아래와 같은 코드가 될 것입니다. 물론 마지막 msgbox sum 문장은 sum의 결과를 사용자에게 보여주기 위한 문장이지요.. 이것을 range("a1")=sum이라고 바꾸면 결과값이 A1셀에 들어가게될 것입니다.

Sub sumsel()
  icount = selection.count
  sum = 0 
  for i=1 to icount 
    sum = sum + selection.cells(i)
  next i
  msgbox sum
End Sub

자 이제 우리의 첫프로젝트가 완성되었습니다. 셀들을 선택하고 실행을 시키면 선택한 셀들의 합을 메시지 창에 보여줍니다. 잘되나요?

오늘은 여기서 마치기로 하고 내일 계속하도록 하겠습니다.



dolljong@dreamwiz.com