Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 시트를 이동하거나 복사할 때 발생하는 “이름이 중복됩니다” 오류의 원인과 해결 절차를 체계적으로 정리하여 실무자가 즉시 적용할 수 있도록 돕는 것이다.
이 오류의 핵심은 통합 문서 또는 워크시트 범위로 정의된 정의된 이름(Name)이 대상 통합 문서 내에 이미 존재하여 충돌하는 상황이다. 이름 관리자에 보이지 않는 숨김 이름·외부 링크에 묶인 이름·자동 생성 이름도 원인이 될 수 있다. 표 이름(Table Name)과 피벗 이름, Power Query 쿼리 이름, 인쇄영역, 자동필터 이름 등이 포함된다.
정의된 이름은 두 가지 범위를 가진다.
| 유형 | 대표 예시 | 증상 | 해결 포인트 |
|---|---|---|---|
| 통합 문서 범위 이름 | TaxRate, ExchangeRate | 복사 시 즉시 오류 | 이름 변경 또는 병합 정의 필요 |
| 워크시트 범위 이름 | Print_Area, SalesRegion | 원본·대상 시트 둘 다 같은 이름 보유 | 시트 범위 이름 정리 후 복사 |
| 자동 생성 이름 | _FilterDatabase, Print_Titles | 보이지 않거나 자동 생성되어 반복 충돌 | 필터·인쇄영역 해제 후 삭제 |
| 표/피벗/쿼리 이름 | Table1, PivotTable1, Query1 | 개체명과 정의된 이름 충돌 | 개체명 재지정 또는 이름 관리자 정리 |
| 외부 링크 종속 이름 | [Budget.xlsx]!TaxRate | 대상 통합 문서 연결 시 충돌 | 링크 끊기·이름 재정의 |
| 숨김·손상 이름 | (Visible=False, 오류 참조) | 이름 관리자에서 안 보이거나 삭제 불가 | VBA로 강제 정리 |
Option Explicit
Sub ListAllNamesToSheet()
Dim nm As Name, ws As Worksheet, r As Long
On Error Resume Next
Application.ScreenUpdating = False
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = "Name_Audit_" & Format(Now, "yyyymmdd_hhnnss")
With ws
.Range("A1:D1").Value = Array("Name", "Scope", "RefersTo", "Visible")
r = 2
For Each nm In ThisWorkbook.Names
.Cells(r, 1).Value = nm.Name
.Cells(r, 2).Value = IIf(nm.Parent Is Nothing, "Workbook", _
IIf(TypeName(nm.Parent) = "Worksheet", nm.Parent.Name, "Workbook"))
.Cells(r, 3).Value = nm.RefersTo
.Cells(r, 4).Value = nm.Visible
r = r + 1
Next nm
' 워크시트 범위 이름 포함 수집
Dim sh As Worksheet, nm2 As Name
For Each sh In ThisWorkbook.Worksheets
For Each nm2 In sh.Names
.Cells(r, 1).Value = nm2.Name
.Cells(r, 2).Value = sh.Name
.Cells(r, 3).Value = nm2.RefersTo
.Cells(r, 4).Value = nm2.Visible
r = r + 1
Next nm2
Next sh
.Columns("A:D").AutoFit
End With
Application.ScreenUpdating = True
End Sub
위 매크로는 통합 문서 및 워크시트 범위 이름을 모두 수집하여 가시성 여부와 참조 대상을 표로 만든다. 출력 시트에서 이름 열 기준으로 중복을 필터링하면 충돌 후보를 즉시 파악할 수 있다.
Sub CleanAutoNames() Dim nm As Name For Each nm In ActiveWorkbook.Names If LCase(nm.Name) Like "*_filterdatabase*" Or LCase(nm.Name) Like "*print_area*" _ Or LCase(nm.Name) Like "*print_titles*" Then On Error Resume Next nm.Delete On Error GoTo 0 End If Next nm End Sub Sub UnhideOrDeleteHiddenNames(Optional ByVal DeleteHidden As Boolean = False) Dim nm As Name For Each nm In ActiveWorkbook.Names If nm.Visible = False Then If DeleteHidden Then On Error Resume Next nm.Delete On Error GoTo 0 Else nm.Visible = True End If End If Next nm End Sub DeleteHidden:=True로 호출하면 숨김 이름을 즉시 정리한다. 권한·보호 상태에 따라 실패할 수 있으므로 먼저 표시 후 수동 검토를 권장한다.
Sub PurgeBrokenAndExternalNames() Dim nm As Name For Each nm In ActiveWorkbook.Names Dim txt As String txt = LCase(nm.RefersTo) If InStr(txt, "#ref!") > 0 Or InStr(txt, "[") > 0 Then On Error Resume Next nm.Delete On Error GoTo 0 End If Next nm End Sub 대괄호가 포함된 참조는 외부 통합 문서 링크일 가능성이 높다. 연결을 유지해야 하면 삭제하지 말고 데이터 > 연결 편집에서 링크를 갱신하거나 값 고정 후 제거한다.
다음 수식을 사용하면 이름 목록을 동적으로 시트에 추출하고 중복을 진단할 수 있다. 365 이상 버전을 가정한다.
=LET( N, NAME.MANAGER(), /* 이름 관리자 테이블을 반환하는 사용자 정의 LAMBDA가 있다고 가정 */ Names, TAKE(CHOOSECOLS(N,1), ROWS(N)), Scope, CHOOSECOLS(N,2), Summary, HSTACK(Names, Scope), SORT(UNIQUE(Summary)) ) 기본 제공 함수만으로 이름 컬렉션을 직접 열람할 수는 없으나, 조직 표준 LAMBDA를 만들어 배포하면 일상 점검이 수월해진다. 대안으로 위 VBA를 사용한다.
w_시트명_주제(워크시트 범위), wb_주제(통합 문서 범위)로 접두어를 구분한다.이 방식은 대상 파일의 민감한 통합 문서 범위 이름과 분리된 환경에서 정리할 수 있다는 장점이 있다.
| 증상 | 원인 | 즉시 처방 |
|---|---|---|
| 복사 즉시 오류 | 통합 문서 범위 동일 이름 존재 | 이름 관리자에서 해당 이름을 변경 또는 삭제한다. |
| 필터 사용 후만 오류 | _FilterDatabase 자동 이름 중복 | 필터 해제 후 자동 이름 삭제 스크립트 실행한다. |
| 인쇄 후 오류 | Print_Area, Print_Titles 중복 | 인쇄 영역 지우기 실행 후 이름 삭제한다. |
| 특정 표 포함 시 오류 | Table1 등 기본 표 이름 충돌 | 표 이름을 고유하게 변경한다. |
| 외부 파일 연결 후 오류 | 외부 링크 기반 정의 이름 | 연결 편집에서 끊거나 값 고정 후 이름 삭제한다. |
| 이름 관리자에 안 보임 | 숨김·손상 이름 | VBA로 목록화 후 표시 또는 삭제한다. |
wb_ 접두어는 통합 문서 범위 전용, w_시트명_ 접두어는 워크시트 범위 전용으로 고정한다.보호가 걸렸거나 숨김 속성, 외부 링크 종속일 가능성이 높다. 보호를 해제하고 숨김을 표시로 바꾸거나 VBA를 사용하여 삭제한다.
VBA로 Names 컬렉션을 순회하여 Name과 RefersTo를 보존하면서 새 이름으로 재정의한다.
대상 통합 문서가 열려 있고 동일한 이름을 보유하면 이동도 충돌한다. 절차는 동일하게 적용한다.
정의된 이름 규칙은 같다. 공동 편집에서는 충돌 발생 시점이 늦게 드러날 수 있으므로 사전 정리가 중요하다.
발생한다. 매크로 유무와 무관하게 정의된 이름 시스템에 의해 충돌이 발생한다.