Excel vba에서 중복 값을 확인하는 방법은 무엇입니까?

Excel vba에서 중복 값을 확인하는 방법은 무엇입니까?

사용자가 데이터를 복사하여 붙여넣을 때 Excel의 데이터 유효성 검사가 작동하지 않습니다.

사용자가 열에 중복된 데이터를 붙여 넣을 때 오류 메시지가 표시되기를 원합니다.

나는 다음 코드(다른 대안)를 사용하고 있지만 이것은 내가 원하는 것이 아닙니다. 사용자가 데이터를 삽입할 때 이를 확인하고 문제가 있으면 오류 메시지를 표시하고 싶습니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
  Dim rngCell As Range Dim lngLstRow As Long lngLstRow = Sheet1.UsedRange.Rows.Count
  For Each rngCell In Sheet1.Range("A1:A" & lngLstRow) 
    If CountIf(Range("A:A"),A1) > 2 Then
      MsgBox "Please enter unique value " & rngCell.Address
        rngCell.Select
    End If 
  Next 
End Sub

답변1

이벤트를 사용하면 Change데이터 유효성 검사 없이 중복 항목을 트랩할 수 있습니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim RangeOfInterest As Range, Intersection As Range, cell As Range
    
    Set RangeOfInterest = Range("A:A")
    Set Intersection = Intersect(RangeOfInterest, Target)
    If Intersection Is Nothing Then Exit Sub
    
    With Application
        For Each cell In Intersection
            If .WorksheetFunction.CountIf(RangeOfInterest, cell.Value) > 1 Then
                .EnableEvents = False
                    .Undo
                .EnableEvents = True
                MsgBox "duplicates not allowed"
            Exit Sub
            End If
        Next cell
    End With
End Sub

메모:

  1. 코드는 열에 입력된 두 항목을 모두 처리할 수 있습니다.열에 복사/붙여넣기
  2. 코드는 다중 셀 복사/열에 붙여넣기를 처리할 수 있습니다.

관련 정보