본문 바로가기
카테고리 없음

입력값을 자동으로 걸러내기. 날짜, 수량, 코드 검증과 최종 판정 플로우

by 시트자동화 2025. 8. 16.

무엇을 다루나요 - 현장 데이터에는 잘못된 날짜, 음수 수량, 존재하지 않는 코드가 섞이기 쉽습니다. 이 글에서는 날짜 형식과 범위, 수량의 유효 구간, 코드 존재 여부를 각각 검사하고, 세 검사를 묶어 최종 판정을 만드는 방법을 안내드립니다. 스크린샷 없이 수식과 CSV만으로 바로 재현하실 수 있도록 샘플 파일과 필드 설명을 함께 제공합니다.

샘플 데이터와 결과 받기

샘플 데이터 설명

원본 09_data_validation_sample.csv

컬럼 의미 예시 비고
date 입력 날짜 2025-07-33 잘못된 날짜 사례 포함
sku 제품 코드 P999 코드표에 없는 값 포함
qty 수량 -1 음수나 공란 사례 포함

결과 포함본 09_data_validation_with_flags.csv

컬럼 의미 예시 비고
date 입력 날짜 2025-07-02 원본 유지
sku 제품 코드 P002 원본 유지
qty 수량 3 원본 유지
is_valid_date 날짜 유효성 TRUE 형식과 하한일자 충족 여부
qty_valid 수량 유효성 TRUE 0 이상 1000 이하
sku_exists 코드 존재 여부 TRUE 제품 코드표 기준
final_status 최종 판정 OK 세 플래그 모두 TRUE면 OK 그 외 REVIEW

검증 정책의 핵심을 먼저 정합니다

  • 날짜는 YYYY-MM-DD 형식만 허용하며 2025-01-01 이후만 유효로 간주합니다.
  • 수량은 0 이상 1000 이하인 숫자만 허용합니다. 공란은 무효입니다.
  • 코드는 코드표에 존재해야 합니다. 존재하지 않으면 누락으로 간주합니다.
  • 최종 판정은 세 검사가 모두 통과하면 OK 그 외는 REVIEW로 정합니다.

Excel 공식을 그대로 사용해 보세요

아래 예시는 표 형태로 작업한다는 가정입니다. 열 이름은 대괄호 표기입니다.

-- 1. 날짜 유효성 is_valid_date
-- 엄격한 형식 검사와 하한일자 동시 적용
=LET(
  s, [@date],
  oklen, LEN(s)=10,
  hy1, MID(s,5,1)="-",
  hy2, MID(s,8,1)="-",
  y, --MID(s,1,4),
  m, --MID(s,6,2),
  d, --MID(s,9,2),
  try, IFERROR(DATE(y,m,d), ""),
  strict, IF(try="",
             FALSE,
             TEXT(try,"yyyy-mm-dd")=s
  ),
  AND(oklen, hy1, hy2, strict, try>=DATE(2025,1,1))
)

-- 2. 수량 유효성 qty_valid
=AND(ISNUMBER([@qty]), [@qty]>=0, [@qty]<=1000)

-- 3. 코드 존재 여부 sku_exists  (products라는 표가 있다고 가정)
=COUNTIF(products[sku], [@sku])>0
-- 또는 =ISNUMBER(XMATCH([@sku], products[sku]))

-- 4. 최종 판정 final_status
=IF(AND([@is_valid_date], [@qty_valid], [@sku_exists]), "OK", "REVIEW")

Google Sheets에서는 이렇게 바꿔 쓰시면 됩니다

-- A열 date, B열 sku, C열 qty 라고 가정

-- 날짜 유효성 엄격 검사
=LET(
  s, A2,
  oklen, LEN(s)=10,
  hy1, MID(s,5,1)="-",
  hy2, MID(s,8,1)="-",
  y, VALUE(MID(s,1,4)),
  m, VALUE(MID(s,6,2)),
  d, VALUE(MID(s,9,2)),
  try, IFERROR(DATE(y,m,d), ""),
  strict, IF(try="", FALSE, TEXT(try,"yyyy-mm-dd")=s),
  AND(oklen, hy1, hy2, strict, try>=DATE(2025,1,1))
)

-- 수량 유효성
=AND(ISNUMBER(C2), C2>=0, C2<=1000)

-- 코드 존재 여부  products 시트의 A열에 sku 목록이 있다고 가정
=COUNTIF(products!A:A, B2)>0

-- 최종 판정
=IF(AND(D2, E2, F2), "OK", "REVIEW")   -- D E F는 각각의 플래그 열

자주 나오는 오류 패턴과 처리 요령

  • 날짜가 텍스트로 입력되어 비교가 실패합니다. 위의 엄격 검사 공식을 사용해 텍스트를 정확한 날짜로 해석한 뒤 형식 일치까지 확인해 주십시오.
  • 수량 셀에 공백과 문자 섞임이 있습니다. TRIM과 VALUE를 결합하여 입력 단계에서 숫자 변환을 먼저 적용해 주십시오.
  • 코드표가 수시로 바뀝니다. products 범위를 표로 관리하면 열 추가나 행 추가에도 참조가 안정적으로 유지됩니다.
  • 재계산으로 판정이 흔들립니다. 배포 전에는 플래그와 최종 판정을 값으로 확정하는 절차를 두시는 것이 안전합니다.

빠르게 점검하는 스니펫

-- 세 검사가 모두 TRUE인 행 수와 OK 건수는 같아야 합니다
=SUMPRODUCT( (is_valid_date=TRUE) * (qty_valid=TRUE) * (sku_exists=TRUE) ) = COUNTIF(final_status, "OK")

-- 날짜 형식이 올바른 행 비율
=COUNTIF(is_valid_date, TRUE) / COUNTA(is_valid_date)

-- 코드 누락 비율
=COUNTIF(sku_exists, FALSE) / COUNTA(sku_exists)

-- 수량 음수 건수
=COUNTIF(qty, "<0")

운영 팁 한 가지

검증 기준은 데이터의 맥락에 따라 달라질 수 있습니다. 예를 들어 날짜 하한을 프로젝트 시작일로 맞추거나, 수량 상한을 품목별 허용치로 분기하는 식입니다. 기준을 시트 상단에 변수 테이블로 분리해 두시면 변경 시 공식을 고치지 않고도 즉시 반영하실 수 있습니다.

맺음말

입력 검증은 리포트 품질을 지키는 가장 경제적인 장치입니다. 제공된 샘플 CSV와 공식을 그대로 사용하시면 날짜, 수량, 코드 검사를 자동화하고 OK와 REVIEW로 정리하는 흐름을 바로 구축하실 수 있습니다.