복잡한 작업을 엑셀로 하다 보면 많은 자료가 생기고 하나 이상의 엑셀파일을 이리 엮고 저리 참조하고
만수산 드렁칡만큼 복잡하게 됩니다. 그래서 참조하는
파일의 신변에 문제가 생기면 제대로 파일작업을 할 수 없게 됩니다.
오늘은 만수산 드렁칡같이
얽히고 설킨 참조와 피참조 관계를 청산하는 프로시져를 소개하고자 합니다.
다음의 프로시져는 외부 파일을 참조한 수식을 값으로 변경하여
외부 파일에 대한 의존을 없애는 작업을 합니다.
Sub
ReplaceExternalLinksWithValue()
Dim rngCell As Range For Each rngCell In
ActiveSheet.UsedRange.SpecialCells(xlFormulas)
If InStr(rngCell.Formula, "[") Then
rngCell.Formula = rngCell.Value
End If
Next
End Sub |
위의 코드에서
ActiveSheet.UsedRange.SpecialCells(xlFormulas)
은 현재 워크시트의 사용한 셀 영역중 수식이 있는 셀 영역을 가리킵니다. 즉 수식만 있는
작업대상영역을 지정하는 것이죠. 그래서 이 셀 영역에서 For Each~Next문을
사용하여 영역내 각 셀을 순회하게 됩니다.
그러나 수식이 있는 셀에 모두 외부참조를 하는 것은 아닐 겁니다. 그중에는 동일한 워크북 내
다른 워크시트는 다른 셀 영역을 참조하는 수도 있을 겁니다. 따라서 For루프를 도는 동안 외부 셀
참조의 신호라고 할 수 있는 [ 을 찾습니다.
If InStr(rngCell.Formula, "[")
Then
이 문자가 발견된다는 것은 외부 셀을 참조하고 있다는
의미로 해석합니다. 문자열에서 특정 문자를 찾는 방법은 InStr()함수를 사용합니다.
[ 를 발견하게 되면 해당 셀의 수식을 해당 셀의 값으로 바꾸면 됩니다.
다음의 코드는 실제로 수식의 연산결과를 값으로 변경하는 내용입니다.
rngCell.Formula = rngCell.Value
필자도 이러한 프로시져를 실제 사용하기도 하는데, 외부 셀을 참조하여 값을 가져오고 다시 셀
연결을 끊기 위해 사용했습니다. 빠르고 유용한 방법이라 여러분에게 권하고 싶었습니다. |