본문 바로가기
엑셀/VBA

VBA로 특정 열 중복 데이터 체크하기

by 큐브빌드 2024. 11. 9.
반응형

데이터를 입력하시는 분들이 가장 기본적이지만 가장 불편한... KEY(ID) 값 유니크 성 체크하기!!

 

과거 비슷한 글을 작성하긴 했었습니다.

https://downupup.tistory.com/entry/VBA%EC%97%90%EC%84%9C-%EC%97%91%EC%85%80-%EC%A1%B0%EA%B1%B4%EB%B6%80-%EC%84%9C%EC%8B%9D-%EB%AA%A8%EB%91%90-%EC%A7%80%EC%9A%B0%EA%B8%B0-%EB%B0%8F-%EC%A4%91%EB%B3%B5%EA%B0%92-%EA%B7%9C%EC%B9%99-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

VBA에서 엑셀 조건부 서식 모두 지우기 및 중복값 규칙 만들기

엑셀 데이터를 사용하다 보면 유니크(Unique) 체크가 필요한 경우가 있습니다. 흔히 기본 Key값(마이크로 액세스에서 사용한 것으로 기억합니다.) , ID 값이죠. 그래서 다양한 중복 체크 방법이 있

downupup.tistory.com

 

저는 서식으로 중복값을 체크했었습니다.

 

결국... 셀 삽입, 셀 삭제, 복사, 붙여 넣기 등 데이터를 입력하면서 지정했던 서식 범위가 뒤죽박죽.... 결과적으로 정상 동작을 하지 못하는 상태가 되었죠..

 

그래서 중복 데이트 체크하는 VBA를 하나 만들었습니다.


Sub CheckUniqueInColumnA()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim cellValue As String
    Dim uniqueValues As New Collection
    
    ' 현재 워크시트 참조
    Set ws = ThisWorkbook.Sheets("Sheet1")  ' 원하는 시트 이름으로 수정하세요
    
    ' A열의 마지막 행 찾기
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    ' A열의 각 셀 값 확인
    On Error Resume Next  ' 중복 항목이 있을 때 오류를 무시하고 진행
    For i = 1 To lastRow
        cellValue = ws.Cells(i, 1).Value
        If cellValue <> "" Then
            uniqueValues.Add cellValue, CStr(cellValue)
            If Err.Number <> 0 Then
                MsgBox "중복된 값 발견: " & cellValue, vbExclamation, "유니크성 검사 결과"
                Exit Sub
            End If
        End If
    Next i
    On Error GoTo 0  ' 오류 처리 복원
    
    MsgBox "A열의 모든 값이 유니크합니다.", vbInformation, "유니크성 검사 결과"
End Sub

 

Collection의 특징을 활용합니다.

 

결국 Collection의 Key 값은 저희가 입력하는 ID(Key) 값과 동일하게 유니크해야 합니다. 그게 Key 값 이니까요.

 

그래서 이 원리를 이용해 Collection에 키값을 엑셀에 있는 데이터로 추가해서 에러 유/무를 체크하여, 중복 유/무를 확인할 수 있습니다.

 

uniqueValues.Add cellValue, Cstr(cellValue)

에서 Cstr(cellValue) 값이 결국 Key 값이 되면서 해당 값의 중복 유무를 찾게 됩니다.
Cstr이 반드시 필요하진 않지만 엑셀 값 특성상 형식이 뒤죽박죽일 수 있어서 포함하였습니다.

아래 이미지의 형식만 참조해 보시면 됩니다.

반응형

댓글