Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 데이터 유효성 검사 목록(드롭다운)이 갑자기 사라지거나 작동하지 않을 때 원인을 신속히 진단하고 즉시 복구하는 실무 절차를 제공하는 것이다.
엑셀의 데이터 유효성 검사 목록은 입력 오류를 줄이는 핵심 기능이다. 그러나 붙여넣기, 참조 범위 변경, 시트 보호, 이름 정의 문제, 파일 호환 등 다양한 이유로 목록이 보이지 않거나 빈 목록이 되는 경우가 발생한다. 다음 순서로 점검하면 된다.
예시1) 시트 내 범위를 직접 참조 원본: =Sheet1!$A$2:$A$50
예시2) 이름 정의(권장)
원본: =품목목록
예시3) 테이블 열을 간접참조
원본: =INDIRECT("Table1[품목]")
#N/A, #REF! 등 오류가 목록에 섞이면 전체 동작이 불안정해질 수 있다. 사전 정제한다.UNIQUE와 SORT를 조합한다.예시) 동적 고유값 정렬 목록 만들기(365 기준) =SORT(UNIQUE(품목데이터범위))
이름 정의 > "품목목록_동적" = SORT(UNIQUE(품목데이터범위))
다른 셀에서 복사하여 일반 붙여넣기나 서식 포함으로 덮어쓰면 데이터 유효성 규칙이 제거된다. 다음 방법으로 예방·복구한다.
단축: Alt, E, S, N (구버전 선택하여 붙여넣기 > 유효성 검사) 또는: Ctrl+Alt+V → N → Enter 다른 시트 범위를 원본으로 쓰거나, 파일 전반에서 재사용하려면 이름 정의를 활용하는 것이 안정적이다. 특히 시트 이름 변경, 열/행 삽입, 파일 병합 시 참조 유지에 유리하다.
#REF!가 뜨는 이름은 유효성 원본에서도 빈 목록을 유발한다. 범위를 재지정한다.동적 이름(OFFSET) =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
동적 이름(INDEX, 권장:揮発성 함수 회피)
=Sheet1!$A$2:INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A))
365 동적 배열 사용
=SORT(UNIQUE(Table_Items[품목]))
OFFSET은揮発성 함수라 대용량 시 퍼포먼스 저하를 유발한다. 가능하면 INDEX 기반 참조나 테이블 구조화 참조를 권장한다.일부 버전에서 데이터 유효성의 원본 상자에 =A2# 같은 스필 범위 직접 참조를 허용하지 않는다. 이때 INDIRECT로 우회한다.
스필 범위 우회 원본: =INDIRECT("Sheet1!A2#")
테이블 열 우회
원본: =INDIRECT("Table1[품목]")
INDIRECT는 텍스트 기반이므로 참조 변경 자동 업데이트가 제한되고, 외부 참조에서 성능 비용이 발생한다. 필요 최소한으로 사용한다..xls로 저장 시 최신 기능이 제한된다. .xlsx 또는 매크로 포함이면 .xlsm으로 저장한다.| 증상 | 가능 원인 | 조치 |
|---|---|---|
| 드롭다운 화살표가 안 보임 | 미선택 상태, 확대/축소, 셀 크기, 병합 | 셀 선택, 80~120% 축소/확대, 병합 해제 |
| 목록이 빈 칸만 보임 | 원본 범위 공백, 필터로 모두 숨김, 참조 오류 | 원본 데이터 확인, 필터 해제, 이름 정의 재설정 |
| 일부 셀에서만 사라짐 | 붙여넣기로 규칙 손상 | 값만 붙여넣기, 유효성만 붙여넣기로 복구 |
| 다른 시트 범위가 안 잡힘 | 버전 제한 | 이름 정의 사용 또는 INDIRECT 우회 |
| 간헐적 무반응 | 공유편집/외부링크 지연, 애드인 충돌 | 오프라인 복사 시험, 애드인 비활성 테스트 |
| 전체에서 규칙 소실 | 정리 매크로·서식복사·시트 복제 시 손상 | 백업에서 규칙 복원, 선택붙여넣기-유효성 |
#REF!·오타 여부 점검한다.INDEX 기반 동적 이름 또는 테이블 구조화 참조로 전환한다..xlsx/.xlsm로 저장하고 재시작한다.Table_Items[품목] -- 원시 데이터 이름 정의 "품목목록" = SORT(UNIQUE(Table_Items[품목])) 유효성 원본: =품목목록 테이블은 행 추가 시 자동 확장되므로 목록 유지가 안정적이다.
이름 정의 "부서목록" = Sheet1!$B$2:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$B:$B)) 유효성 원본: =부서목록 OFFSET 대비 재계산 비용이 낮다.
1) 각 부서 이름과 동일한 이름 정의 생성(예: "영업" = 영업팀 목록 범위) 2) 팀 셀 유효성 원본: =INDIRECT(부서셀) #REF!)을 일괄 정리한다.다수 시트·다수 범위에서 동일 목록 규칙을 일괄 적용하거나 파괴된 규칙을 복구해야 할 때 VBA로 자동화한다.
Sub ApplyDVList() Dim rng As Range Dim ws As Worksheet Dim src As String src = "=품목목록" ' 이름 정의 또는 INDIRECT 문자열
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
Set rng = ws.UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rng Is Nothing Then
With rng.Validation
.Delete
End With
With rng.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=src
.IgnoreBlank = True
.InCellDropdown = True
.ShowError = True
End With
End If
Set rng = Nothing
Next ws
End Sub
1) 입력 시트는 테이블 기반으로 설계한다. 2) 모든 목록은 이름 정의로 관리하고 스코프는 통합 문서로 통일한다. 3) 목록 원본은 SORT(UNIQUE()) 등으로 전처리하고 오류 값을 제거한다. 4) 붙여넣기 정책은 "값만"을 기본으로 하고, 필요 시 "유효성만"을 별도 적용한다. 5) 다른 시트 또는 외부 파일 참조는 이름 정의 또는 INDIRECT로 간접화한다. 6) 변경 이력(시트 추가/삭제, 경로 변경)을 기록하고 월 1회 이름 정의 검사를 수행한다. INDIRECT("Sheet1!A2#")로 우회한다.규칙이 있는 셀을 복사한 후 대상 범위를 선택하고 선택하여 붙여넣기 > 유효성 검사만 선택하면 된다. 값·서식은 보존하고 규칙만 복제한다.
테이블 구조화 참조 또는 INDEX 기반 동적 이름을 사용하면 된다. 예: =Table_Items[품목]을 간접참조하거나 =Sheet1!$A$2:INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A))로 정의한다.
SORT(UNIQUE())로 고유 목록을 만든 뒤 그 결과 범위를 이름 정의하여 유효성 원본으로 사용한다.
가능하면 병합을 피하지만 불가피하면 입력 셀은 비병합 상태로 두고 시각적 병합은 가로 가운데 맞춤·셀 가운데 맞춤 등으로 대체한다. 병합을 유지하면 드롭다운 표시가 불안정할 수 있다.
주기적으로 원본을 내부 시트에 캐시하는 매크로 또는 파워쿼리를 사용한다. 유효성 원본은 내부 캐시 범위를 참조한다.