Range|Precedents|Dependents|ActiveCell|Precedents|Dependents|ShowPrecedents|
|ShowDependents|ClearArrows|SpecialCells|
|ClearContents|Application.InputBox|Not|Nothing|
|BorderAround|
범위에 접근하는 메소드나 속성이 참으로 많기도 하다
엑셀의 모든 작업은 마우스로 선택을 하고 하듯이
엑셀프로그래밍에서도 역시 해당 오브젝트에 접근(선택이 아니고)하여야 한다
그래서 다양한 접근 방법을 살펴보는것이고..
또한 접근방법이 다양하다
이번 페이지에서는 수식이 참조하는 셀(Precedent)
셀에 의존하는(Dependent) 수식을 갖고 있는셀에 접근하는 것을 해본다
수식이 참조하는 범위에 접근하고 싶다
워크시트에 수식이 복잡하게 널려있을때
다른 사람에게 수식을 이해시켜야 할 경우가 있기도하고
스스로도 작성된 수식이 어떤셀들과 어떤 관계를 갖고 있는지
알고 싶을때가 있다
현재 선택된 셀(ActiveCell)의 수식에서 참조하는 셀찾기
ActiveCell.ShowPrecedents
현재 선택된 셀(ActiveCell)을 참조하고 있는 수식이 들어있는 셀찾기
ActiveCell.ShowDependents
수식분석화살표를 모두 지우고 싶을때는 Worksheet오브젝트의 ClearArrows메소드를 사용한다
ActiveSheet.ClearArrows
또 소루션을 만들때 수식이 있는 셀은 남겨두고 나머지 수식에서
참조하는 셀의 값은 모두 지워버려야 하는일이 많을것이다
아래의 그림에서 H17 은 수식이 있는 셀이고
F10:F13 에는 수식이 참조하는 셀이고 사용자에 따라서 수시로 변하는 값들이다
이 특정한 값을 모두 지워버리고 새로 시작하고 싶을것이다
Dim rngFormula As Range, rX As Range
Set rngFormula = Cells.SpecialCells(xlCellTypeFormulas)
For Each rX In rngFormula.Cells
rX.Precedents.ClearContents
Next
이제 왜 특정 범위에 접근하여야 하는지 이유를
조금씩 알아가고 있을것이다
위의 문제의 경우 SpecialCells메서드가 없다면
수식이 있는 셀들을 찾아다니기 힘들것이다
또한 수식이 참조하고 있는 셀들을 찾는다고 하는 일도 위의 그림에서
보듯이 무척 의미있는 일이다
이렇게 특정한 범위를 찾는 방법들이 제공되어 일을 간단하게 처리하게 된다
Use Precedents And Dependents
코드 실행중에 사용자가 직접 특정범위를 선택하게 할때
작업 범위가 정해지지 않고 사용자가 원하는
범위를 입력하게 하는 방법이 있다
VB에서 InputBox함수를 사용하여
사용자가 값을 입력하게 하였던 기억이 날것이다
엑셀의 Application오브젝트가 제공하는
InputBox라는 메소드가 있다
이것을 활용하여 사용자로부터 작업범위를 지정받고 해당범위에
작업을 해보자
그림과 같이 Application오브젝트의 InputBox메소드를
사용하면 마우스로 범위를 선택하면 InputBox에 자동으로
주소가 입력된다
Sub passRangeToXl()
Dim rX As Range, rI As Range, iX As Integer
Cells.Clear
On Error Resume Next
Set rX = Application.InputBox("마우스로 원하는 범위선택", _
"UNO21.COM", , , , , , 8)
If Not rX Is Nothing Then
For Each rI In rX
rI = Int(Rnd() * 9) + 1
checkMe rI
Next
Else
MsgBox "범위를 선택!!", , "UNO21.COM"
End If
End Sub
Sub checkMe(rY As Range)
With rY
.Interior.ColorIndex = .Value
.Font.Bold = True
Select Case .Value
Case 2, 4, 8, 6
.Font.ColorIndex = 1
Case Else
.Font.ColorIndex = 2
End Select
.Font.Name = "Tahoma"
.BorderAround xlSolid
End With
End Sub
범위에 접근하는것을 몇페이지에 걸쳐서 살펴보았다
가장기본적인것만 살펴보았다
다른 오브젝트들을 살펴 보면서 보다 많이 범위에 관련된것들이
나오게 될것이다