- 최초 작성일: 2000-10-26
- 최종 수정일: 2026-09-30
- 조회수: 4 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 파일연결 제거하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에는 질문 하나를 살펴봅니다.
다른 사람이 작성한 파일을 받았는데 열 때마다 "파일이 …에 연결되어 있습니다. 갱신을 하시겠습니까?"라는 메시지가 자꾸 나타난다는 질문입니다. 이런 메시지가 나타나지 않도록 하고 싶은데 어떻게 하면 되는지 물으셨습니다.
파일연결 제거하기
핵심 요약: 팬텀링크 제거
InStr로 수식에 [ ]나 !가 있는지 확인해 다른 파일 또는 다른 시트로의 연결을 찾아 값으로 바꿉니다.
- 1단계: 현재 시트의 UsedRange를 대상 범위로 지정합니다.
- 2단계: InputBox로 다른 파일(1)과 다른 워크시트(2) 중 무엇을 제거할지 선택받습니다.
- 3단계: 대괄호 또는 느낌표가 있는 수식을 값으로 바꿉니다.
Step 1: 팬텀링크란?
아래와 같은 "지점별 달성율" 시트가 있습니다. 이 시트 중에서 목표는 "목표" 시트에서, 실적은 "실적" 시트에 링크를 해서 화면상에 표시를 한 것입니다. 셀에 가서 보시면 공식이 들어있을 것입니다.
예제 시트(지점별 달성율)의 각 셀에는 =목표!B2, =실적!B2 같은 수식이 들어 있습니다.
| 지점명 | 목표 | 실적 | 달성율 |
|---|---|---|---|
| 강동 | 100 | 130 | 1.300 |
| 강서 | 130 | 180 | 1.385 |
| 강남 | 150 | 170 | 1.133 |
| 강북 | 200 | 200 | 1.000 |
그런데 누가 (실수로) 이 링크된 시트를 삭제했다거나 아니면 이러한 달성율 파일을 다른 사람에게 주어야겠는데, 목표나 실적 파일은 주고 싶지 않을 경우에는 링크를 모두 제거한 다음 주어야겠지요? 물론 복사-선택하여 붙여넣기-값 등의 작업을 하고 건네주면 되겠습니다만 이것 역시 번거롭습니다.
특히 질문하신 분의 경우처럼 더 이상 연결이 필요없게 되어있는데도 연결정보가 계속 남아있어 파일을 열 때마다 계속 "연결을 하실래요 안하실래요… " 등의 메시지가 자꾸 뜨면 무척 성가십니다. 이와 같은 연결을 Phantom Link(우리말로 하면 유령연결? ^^) 라고 한다더군요. ^^
아래의 표에서 이 팬텀링크를 제거해 보도록 하겠습니다. 목표와 실적 부분으로 가서 이 부분이 다른 시트와 연결되어 있음을(다른 파일과의 연결도 마찬가지입니다) 확인 하신 다음, "연결 끊기" 버튼을 클릭해 보세요.
버튼을 클릭하면 어떤 팬텀링크를 해제할 것인지를 물어오고, 워크북인지 워크시트인지를 지정해 주면 해당되는 개체의 팬텀링크를 끊어주지요? 코드를 살펴보겠습니다. 그동안 강좌를 잘 따라오신 분들은 이제 코드는 많이 눈에 익으시지요? ^^
Step 2: 팬텀링크 제거 코드 작성하기
Sub DelPhantomLink()
Dim rngCell As Range
Dim rngTarget As Range
Dim intResult As Integer
On Error Resume Next
Set rngTarget = ActiveSheet.UsedRange
'//필요한 변수를 선언해 준 다음, rngTarget변수에는 현재 시트의 UsedRange, 즉 내용이
'//입력된 모든 영역을 저장합니다.
intResult = Val(InputBox("어떤 팬텀링크를 해제할까요?" & vbCr & vbCr & _
"다른 파일(워크북) ☞ 1 " & vbCr & _
"다른 워크시트 ☞ 2 ", "연결 해제//Exceller", 1))
'//InputBox를 사용해서 어떤 팬텀링크를 해제할 것인지를 사용자에게 묻습니다.
'//여기서 Val() 함수는 숫자 형태의 문자열 데이터를 숫자로 바꾸어 주는 함수입니다.
'//Excel 97버전부턴가 2000 버전에서부터인가… 이것은 생략해도 상관없으나
'//가능하면 적어주도록 하세요.
Select Case intResult
Case 1
For Each rngCell In rngTarget
If InStr(rngCell.Formula, "[") > 0 And InStr(rngCell.Formula, "]") > 0 Then _
rngCell = rngCell.Value
Next rngCell
'//다른 워크북과의 팬텀링크를 끊을 경우에 대한 처리과정입니다. 특정 셀을 다른 파일과
'//연결한 다음 내용을 보면 [ ]로 둘러싸여 있지요? 그래서 이 대괄호가 있으면 해당 셀의
'//수식을 값으로 치환하는 것입니다.
'//InStr() 함수에 대해서는 설명을 드렸던가요? 문자열 중에서 특정 문자열의 위치를 찾아
'//되돌려 주는 함수입니다. 자세한 사항은 도움말을 참고하시기 바랍니다.
Case 2
For Each rngCell In rngTarget
If InStr(rngCell.Formula, "!") > 0 Then rngCell = rngCell.Value
Next rngCell
'//다른 워브시트와의 팬텀링크를 제거하는 경우에 대한 처리과정입니다. 특정 셀이 다른
'//워크시트와 연결되면 !표시가 생깁니다. 즉 "=목표!B2"라고 되어 있으면 "목표"시트의
'//B2 셀과 링크가 되어 있는 것이지요. 따라서 InStr() 함수를 사용하여 현재 시트의
'//UsedRange 중에서 !라는 문자열이 있을 경우 수식을 값으로 치환합니다.
Case Else
MsgBox "선택이 잘못되었습니다", , "선택 오류//Exceller"
Exit Sub
End Select
End Sub
다른 통합 문서에 대한 연결은 엑셀의 [데이터] > [연결 편집] > [연결 끊기] 메뉴나 ActiveWorkbook.BreakLink 메서드로도 끊을 수 있습니다. 이 코드는 셀의 수식만 검사하므로 이름 정의, 차트, 조건부 서식, 데이터 유효성 검사에 남아 있는 연결은 제거하지 못합니다. 또한 대괄호([ ])는 표 구조적 참조에도 쓰이므로, 값으로 바꾸기 전에 파일을 백업해 두는 것이 안전합니다.
마무리
이번 시간에 설명드린 프로시저도 Personal.xls 파일에 복사해두고 사용하시면 편리할 것입니다.
다음 시간에 또…
정리 — 팬텀링크 제거 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 대상 범위 | ActiveSheet.UsedRange | 사용된 영역 전체 |
| 선택 입력 | Val(InputBox(...)) | 제거할 연결 종류 선택 |
| 다른 파일 | InStr(rngCell.Formula, "[") > 0 | 대괄호가 있으면 다른 통합 문서 연결 |
| 다른 시트 | InStr(rngCell.Formula, "!") > 0 | 느낌표가 있으면 다른 워크시트 연결 |
| 값으로 변환 | rngCell = rngCell.Value | 수식을 값으로 바꾸기 |
자주 묻는 질문 (FAQ)
Q1. 팬텀링크는 무엇인가요?
더 이상 필요 없는데도 연결 정보가 남아 있어 파일을 열 때마다 갱신 여부를 묻게 만드는 유령 같은 연결입니다.
Q2. 다른 파일과의 연결은 수식에서 어떻게 확인하나요?
다른 통합 문서를 참조하는 수식에는 파일명이 대괄호([ ])로 표시됩니다.
Q3. 다른 워크시트와의 연결은 어떻게 확인하나요?
다른 시트를 참조하는 수식에는 시트명 뒤에 느낌표(!)가 붙습니다.
마치며
수식에 남은 연결을 값으로 바꾸면 성가신 링크 갱신 메시지를 없앨 수 있습니다.