- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀에서 데이터 유효성 검사(Data Validation) 관련 오류가 발생할 때 원인 진단부터 즉시 적용 가능한 해결책, 예방 방법까지 체계적으로 제시하여 사용자가 현장에서 곧바로 문제를 해결하도록 돕는 것이다.
1. 빠른 진단 체크리스트
데이터 유효성 검사 오류는 대개 참조 범위, 표시 형식, 보호 설정, 복사·붙여넣기 방식, 버전 차이 등 기초 설정 문제에서 발생한다. 아래 표의 항목을 위에서 아래 순서로 점검하면 대부분의 문제를 단시간에 해결할 수 있다.
| 증상 | 우선 점검 항목 | 즉시 조치 |
|---|---|---|
| 드롭다운 목록이 보이지 않음 | 유효성 유형이 목록인지, 셀 안의 드롭다운 옵션 체크, 참조 범위 숨김·필터 여부 | 데이터 > 데이터 유효성 검사 > 설정에서 목록 지정 및 셀 안의 드롭다운 체크 |
| 올바른 값을 입력했는데도 오류 메시지 | 앞뒤 공백, 데이터 형식(숫자 vs 텍스트), 유사 문자(0 vs O, 1 vs l), 지역 소수점·날짜 형식 | TRIM, VALUE, DATEVALUE 등으로 정규화, 표시 형식 일치 |
| 유효성 규칙이 사라짐 | 복사·붙여넣기 시 서식 덮어쓰기, 외부 시트에서 값 붙여넣기 | 붙여넣기 옵션에서 값만 붙여넣기, 유효성 규칙 다시 적용 |
| 의존 목록(종속 드롭다운)이 동작하지 않음 | INDIRECT 참조 오류, 이름 정의 범위·시트 범위, 특수문자 포함 여부 | 이름 정의로 범위 고정, 공백·특수문자 제거, INDIRECT 구문 재확인 |
| 원본 범위가 표/스필 범위인데 업데이트 반영 안 됨 | 구버전 호환, 구조적 참조 구문, 스필 연산자(#) 사용 여부 | =A2# 형태로 스필 전체 참조, 또는 이름 정의에 동적 참조 사용 |
| 유효성 경고가 떠야 하는데 허용됨 | 오류 메시지 탭에서 스타일이 중지인지, 사용자 지정 오류 알림 활성화 | 오류 메시지 스타일을 중지로 변경 |
| 보호된 시트에서 규칙 편집 불가 | 검토 > 시트 보호, 허용 옵션에서 개체 편집·피벗테이블 사용 등 제한 | 시트 보호 해제 후 편집, 다시 보호 설정 |
2. 기본기 정리: 데이터 유효성 검사의 구조
데이터 유효성 검사는 크게 유형과 원본으로 구성된다. 유형은 모든 값, 정수, 십진수, 목록, 날짜, 시간, 텍스트 길이, 사용자 지정이 있으며, 원본은 유형에 따라 상수, 범위, 수식으로 입력한다. 특히 목록 유형은 쉼표로 구분된 상수 목록이나 셀 범위 또는 스필 범위를 참조할 수 있다. 입력 메시지 및 오류 메시지 탭은 사용자 안내와 차단 강도를 제어한다.
3. 유형별 대표 오류와 해결
3.1 목록(List) 드롭다운 오류
증상 1 드롭다운 표시가 사라지거나 선택지가 없음이다.
- 데이터 > 데이터 유효성 검사 > 설정에서 허용을 목록으로 선택한다.
- 셀 안의 드롭다운을 체크한다.
- 원본에 범위를 지정할 때 머리글을 제외하고 실제 항목만 지정한다.
- 필터가 적용되어 원본 범위 행이 숨겨진 경우 필터 해제 후 다시 확인한다.
증상 2 원본 범위를 표(Table) 또는 동적 목록으로 쓰는데 갱신이 반영되지 않음이다.
- 스필을 사용하는 경우
=A2#처럼 # 연산자로 전체 스필 범위를 참조한다. - 표를 사용하는 경우
=테이블1[항목]구조적 참조가 올바른지 확인한다. - 구버전에서 구조적 참조가 제한될 수 있으므로 필요 시 이름 정의로 동적 참조를 우회한다.
예: 이름 정의 "목록범위" =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1) 유효성 원본 =목록범위 3.2 숫자·날짜·시간 비교 오류
표시 형식과 실제 데이터 형식의 불일치가 흔한 원인이다. 텍스트로 저장된 숫자는 숫자 비교에서 실패한다.
텍스트 숫자->숫자 변환: =VALUE(A2) 텍스트 날짜->날짜 변환: =DATEVALUE(A2) 텍스트 시간->시간 변환: =TIMEVALUE(A2) 날짜 범위를 제한하려면 허용: 날짜와 데이터: 사이로 설정하고 시작·종료일을 절대 참조한다. 지역 설정에 따라 소수점 기호와 날짜 구분자 차이가 있으므로 파일 공유 시 주의한다.
3.3 사용자 지정(Custom) 수식 오류
사용자 지정은 수식이 TRUE일 때만 입력 허용이다. 참조가 혼합되면 오른쪽·아래로 복사 시 엇나간다.
예: A열에 대문자 영문 3글자만 허용 허용: 사용자 지정 수식: =AND(LEN(A1)=3, EXACT(A1, UPPER(A1)), NOT(SUM(--ISNUMBER(MID(A1,ROW($1:$3),1)+0))) ) 수식의 기준셀은 현재 선택 영역의 좌상단 기준으로 해석한다. 따라서 절대/상대 참조를 의도대로 고정한다.
4. 숨은 원인 심층 분석
4.1 공백·유사문자·보이지 않는 문자
앞뒤 공백, 줄바꿈(CHAR(10)), 비표준 공백(CHAR(160))은 목록 일치 비교를 실패시킨다. 정규화 파이프라인을 권장한다.
=TRIM(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),CHAR(10)," ")) 0과 O, 1과 l 같은 유사문자는 폰트에 따라 구분이 어렵다. 기준 목록을 대문자·숫자로 강제하고 EXACT로 비교한다.
4.2 병합 셀과 숨김/필터
병합 셀은 유효성 범위 복사·확장 시 예측 불가능한 결과를 낳는다. 병합 해제 후 규칙을 적용하고 필요한 경우 서식으로만 병합 효과를 표현한다. 필터로 숨겨진 행에 적용된 유효성은 사용자가 보지 못해 선택지를 못 찾는 경우가 있으므로 원본 범위는 별도 시트로 분리한다.
4.3 보호된 시트/통합 문서
시트 보호가 활성화되면 유효성 수정이 차단된다. 다음 순서로 점검한다.
- 검토 > 시트 보호 해제
- 필요 시 통합 문서 보호도 해제
- 수정 후 다시 보호하고 허용 옵션에서 선택된 셀만 잠금 해제
4.4 붙여넣기로 규칙 손상
외부 시트에서 전체 셀을 복사해 오면 유효성 규칙이 덮어써진다. 다음 원칙을 지킨다.
- 데이터만 가져올 때는 붙여넣기 > 값을 사용한다.
- 서식은 서식 붙여넣기로 따로 적용한다.
- 유효성만 복사하려면 선택하여 붙여넣기 > 유효성을 사용한다.
4.5 이름 정의 범위 스코프
이름 정의의 스코프(통합 문서/시트)가 다르면 다른 시트에서 인식되지 않는다. 동일 이름을 중복 정의하지 말고 통합 문서 스코프로 관리한다. 외부 통합 문서 참조는 링크 끊김 시 목록이 사라진다.
5. 의존 드롭다운(종속 목록) 안정화
상위 선택에 따라 하위 목록이 달라지는 구조는 INDIRECT를 주로 사용한다. 공백·특수문자가 있으면 이름으로 사용할 수 없으므로 치환 규칙을 통일한다.
전처리 이름: =SUBSTITUTE(SUBSTITUTE(대분류," ","_"),"-","_") 하위범위 이름: 각 대분류명과 동일한 이름으로 목록 범위를 정의 하위 유효성 원본: =INDIRECT(SUBSTITUTE(SUBSTITUTE($A2," ","_"),"-","_")) 동적 배열을 사용할 수 있으면 FILTER로 안정화한다.
=UNIQUE(FILTER(목록!$B:$B, 목록!$A:$A=$A2)) // A열 기준 B열 항목 필터 원본 참조: =G2# // 스필 전체 참조 6. 날짜·시간 유효성: 현업 패턴
- 근무일만 허용: 사용자 지정 수식
=WEEKDAY(A1,2)<=5 - 오늘 이후만 허용:
=A1>=TODAY() - 시:분 15분 단위만:
=MOD(A1, TIME(0,15,0))=0
다국어/다지역 환경에서는 시스템 로캘에 따라 날짜 구분자가 달라진다. 파일 공유 전 표시 형식과 데이터 형식을 명시적으로 설정한다.
7. 텍스트 길이·패턴 검사
고정 길이 또는 정규 패턴 검사는 사용자 지정으로 처리한다.
한글+숫자만 허용: =SUM(--ISNUMBER(FIND(MID(A1,ROW($1:INDEX($1:$1048576,LEN(A1))),1),"0123456789가-힣"))) = LEN(A1) 영문 대소문자·숫자·언더스코어만: =AND(LEN(A1)>0, A1=SUBSTITUTE(A1," ",""), A1=TEXTJOIN("",,IFERROR(MID(A1,ROW($1:INDEX($1:$1048576,LEN(A1))),1),""))) 복잡한 패턴은 입력 단계에서 제한하는 대신 사후 검증 열을 따로 두고 조건부 서식으로 표시하는 편이 유지보수에 유리하다.
8. 대규모 시트 성능 최적화
- 목록 원본은 불연속 범위보다 연속 스필/표 열이 빠르다.
- INDIRECT, OFFSET 등 휘발성 함수 최소화, FILTER·XLOOKUP 등 비휘발성 대체 사용을 검토한다.
- 유효성 규칙은 필요한 열에만 적용하고 전체 시트 적용을 피한다.
9. 자동 감사: 잘못된 데이터 원 찾기
유효성 위반 셀을 한 번에 표시하려면 다음 절차를 사용한다.
- 데이터 > 데이터 유효성 검사 > 잘못된 데이터 표시(원 그리기)를 클릭한다.
- 수정 후 원 제거로 정리한다.
대량 점검은 VBA 스니펫으로 자동화할 수 있다.
Sub 유효성감사_요약() Dim ws As Worksheet, c As Range, r As Range, msg As String For Each ws In ThisWorkbook.Worksheets On Error Resume Next Set r = ws.UsedRange.SpecialCells(xlCellTypeAllValidation) On Error GoTo 0 If Not r Is Nothing Then For Each c In r If Not c.Validation Is Nothing Then If Not c.Validation.Value Then msg = msg & ws.Name & "!" & c.Address(0, 0) & " - " & c.Validation.ErrorMessage & vbCrLf End If End If Next c End If Set r = Nothing Next ws If msg = "" Then MsgBox "모든 시트 유효성 통과", vbInformation Else MsgBox "유효성 위반 목록:" & vbCrLf & msg, vbExclamation End If End Sub 10. 재현 가능한 문제해결 절차(표준 운영 절차)
- 증상 캡처 및 범위 파악: 드롭다운 표시 여부, 오류 메시지 내용, 적용 셀 주소를 기록한다.
- 규칙 내보내기: 의심 셀을 선택하고 데이터 유효성 검사 창에서 설정 스크린샷을 저장한다.
- 원본 정규화: TRIM·CLEAN·대/소문자 통일을 적용하고 고유 목록을 UNIQUE로 재생성한다.
- 참조 교체: 불연속·수동범위를 스필/표/이름 정의 기반으로 전환한다.
- 오류 스타일 강화: 오류 메시지 > 스타일을 중지로 설정, 사용자 안내 문구를 구체화한다.
- 보호·병합·필터 해제: 잠금 해제 후 수정하고 완료 시 최소 권한으로 재보호한다.
- 복사·붙여넣기 정책 수립: 값 붙여넣기 우선, 유효성은 선택하여 붙여넣기 > 유효성으로 유지한다.
- 자동 감사: 원 그리기 또는 VBA 점검으로 위반 셀을 일괄 수정한다.
11. 케이스 스터디: 현업에서 자주 틀리는 설정
11.1 스필 목록을 일반 범위로 참조
문제: =A2:A100으로 고정 참조하여 신규 항목이 누락된다. 해결: =A2#로 스필 전체를 참조한다.
11.2 표 머리글 포함
문제: 구조적 참조 =테이블1[[#전체],[항목]]로 머리글까지 포함하여 "항목"이 드롭다운에 나타난다. 해결: =테이블1[항목]로 수정한다.
11.3 사용자 지정 수식 기준셀 오해
문제: 선택 영역이 B2:D10인데 수식에서 A1을 기준으로 작성하여 행·열마다 다른 판정이 난다. 해결: 좌상단 기준으로 상대/절대 참조를 재설정한다.
11.4 텍스트 "숫자" 비교 실패
문제: 00123과 123이 다른 값으로 인식된다. 해결: 비교 전 --A1 또는 VALUE(A1)로 정규화하고 표시 형식으로 자리수 유지한다.
12. 예방 전략과 운영 팁
- 입력층-검증층-저장층 분리: 원본 목록은 숨김 시트, 입력은 양식 시트, 검증·정규화는 중간 계산 시트로 분리한다.
- 이름 규약: 범위 이름은 영문·언더스코어만, 스코프는 통합 문서로 통일한다.
- 배포 전 호환성 검사: 동적 배열이 없는 환경에서는 스필·UNIQUE·FILTER 사용을 회피하거나 대체 공식을 준비한다.
- 변경 관리: 유효성 규칙 변경 시 스크린샷과 변경 이유를 기록하고 버전명을 시트에 표기한다.
13. 문제별 즉시 사용 가능한 수식 레시피
| 목표 | 사용자 지정 수식 |
|---|---|
| 중복 입력 방지 | =COUNTIF($A:$A,A1)=1 |
| 공백 입력 금지 | =LEN(TRIM(A1))>0 |
| 숫자만 허용 | =ISNUMBER(--A1) |
| 목록과 대소문자 동일성 검사 | =SUMPRODUCT(--EXACT(TRIM(A1),TRIM(목록범위)))=1 |
| YYYY-MM 형식만 허용 | =AND(LEN(TEXT(A1,"yyyymm"))=6,DAY(EOMONTH(A1,0))>=28) |
14. 고급: 유효성 규칙 백업·복원 VBA
대규모 시트에서 규칙이 자주 깨지는 경우 다음 매크로로 규칙을 백업·복원한다.
Type DVRule Address As String Type As Long AlertStyle As Long Operator As Long Formula1 As String Formula2 As String IgnoreBlank As Boolean InCellDropdown As Boolean ErrorTitle As String ErrorMessage As String End Type
Sub DV_Backup()
Dim ws As Worksheet, c As Range, r As Range, i As Long, f As Integer
f = FreeFile
Open ThisWorkbook.Path & "\DV_Backup.tsv" For Output As #f
For Each ws In Worksheets
On Error Resume Next
Set r = ws.UsedRange.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If Not r Is Nothing Then
For Each c In r
With c.Validation
Print #f, ws.Name & vbTab & c.Address(0, 0) & vbTab & .Type & vbTab & .AlertStyle & vbTab & .Operator & vbTab & .Formula1 & vbTab & .Formula2 & vbTab & .IgnoreBlank & vbTab & .InCellDropdown & vbTab & .ErrorTitle & vbTab & .ErrorMessage
End With
Next c
End If
Set r = Nothing
Next ws
Close #f
MsgBox "DV_Backup.tsv 저장 완료", vbInformation
End Sub
Sub DV_Restore()
Dim f As Integer, s As String, t()
Dim ws As Worksheet, c As Range
f = FreeFile
Open ThisWorkbook.Path & "\DV_Backup.tsv" For Input As #f
Do While Not EOF(f)
Line Input #f, s
t = Split(s, vbTab)
Set ws = Worksheets(CStr(t(0)))
Set c = ws.Range(CStr(t(1)))
With c.Validation
.Delete
.Add Type:=CLng(t(2)), AlertStyle:=CLng(t(3)), Operator:=CLng(t(4)), Formula1:=CStr(t(5)), Formula2:=CStr(t(6))
.IgnoreBlank = CBool(t(7))
.InCellDropdown = CBool(t(8))
.ErrorTitle = CStr(t(9))
.ErrorMessage = CStr(t(10))
End With
Loop
Close #f
MsgBox "유효성 복원 완료", vbInformation
End Sub
15. 문제 해결 플로우차트 요약
- 증상 파악(드롭다운·오류 메시지·존재 여부) →
- 유형 확인(목록/숫자/날짜/사용자 지정) →
- 원본 정규화 및 참조 방식 점검(스필, 표, 이름 정의) →
- 형식 일치(숫자/텍스트/날짜) 및 지역 설정 확인 →
- 보호·병합·필터·붙여넣기 정책 점검 →
- 오류 스타일·사용자 메시지 최적화 →
- 자동 감사 및 백업·복원 운영
FAQ
드롭다운은 보이는데 값 선택 후 셀에 반영되지 않는다.
병합 셀 또는 데이터 유효성과 조건부 서식의 충돌 가능성이 높다. 병합을 해제하고 규칙을 다시 적용하고, 조건부 서식의 중복 규칙을 정리한다.
목록 원본이 다른 통합 문서에 있을 때 자주 깨진다.
링크가 끊기면 목록이 비워진다. 원본을 같은 통합 문서의 숨김 시트로 이전하거나 이름 정의에 값 복제 스크립트를 사용한다.
CSV로 저장하면 유효성이 사라진다.
CSV는 유효성 메타데이터를 저장하지 않는다. xlsx 포맷으로 저장하고 CSV는 내보내기 용도로만 사용한다.
유효성 규칙을 빠르게 다시 적용하려면?
원본 셀을 선택하고 복사 후 대상 범위에 선택하여 붙여넣기 > 유효성을 사용한다. 또는 위 VBA 백업·복원 스크립트를 활용한다.
동적 배열이 없는 환경에서 의존 목록을 구축하려면?
필터 대신 피벗 테이블 또는 고급 필터로 하위 목록을 만들어 고정 범위를 참조한다. 변경 시 재생성이 필요하다.