수색…


소개

특정 지점에서 데이터의 범위를 평가할 것이며 중복 된 데이터를 찾아야합니다. 더 큰 데이터 세트의 경우 VBA 코드 또는 조건부 함수를 사용하는 여러 가지 방법을 사용할 수 있습니다. 이 예제에서는 두 개의 중첩 된 for-next 루프 내에서 간단한 if-then 조건을 사용하여 범위의 각 셀이 해당 범위의 다른 셀과 동일한 값인지 여부를 테스트합니다.

특정 범위에서 중복 항목 찾기

다음 테스트는 중복 값에 대해 A2에서 A7까지의 범위를가집니다. 비고 : 이 예는 솔루션에 대한 첫 번째 접근법으로서 가능한 솔루션을 보여줍니다. 범위보다 배열을 사용하는 것이 더 빠르며 컬렉션 또는 사전 또는 xml 메서드를 사용하여 중복을 검사 할 수 있습니다.

    Sub find_duplicates()
' Declare variables
  Dim ws     As Worksheet               ' worksheet
  Dim cell   As Range                   ' cell within worksheet range
  Dim n      As Integer                 ' highest row number
  Dim bFound As Boolean                 ' boolean flag, if duplicate is found
  Dim sFound As String: sFound = "|"    ' found duplicates
  Dim s      As String                  ' message string
  Dim s2     As String                  ' partial message string
' Set Sheet to memory
  Set ws = ThisWorkbook.Sheets("Duplicates")

' loop thru FULLY QUALIFIED REFERENCE
  For Each cell In ws.Range("A2:A7")
    bFound = False: s2 = ""             ' start each cell with empty values
 '  Check if first occurrence of this value as duplicate to avoid further searches
    If InStr(sFound, "|" & cell & "|") = 0 Then
    
      For n = cell.Row + 1 To 7           ' iterate starting point to avoid REDUNDANT SEARCH
        If cell = ws.Range("A" & n).Value Then
           If cell.Row <> n Then        ' only other cells, as same cell cannot be a duplicate
                 bFound = True             ' boolean flag
              '  found duplicates in cell A{n}
                 s2 = s2 & vbNewLine & " -> duplicate in A" & n
           End If
        End If
       Next
     End If
   ' notice all found duplicates
     If bFound Then
         ' add value to list of all found duplicate values
         ' (could be easily split to an array for further analyze)
           sFound = sFound & cell & "|"
           s = s & cell.Address & " (value=" & cell & ")" & s2 & vbNewLine & vbNewLine
     End If
   Next
' Messagebox with final result
  MsgBox "Duplicate values are " & sFound & vbNewLine & vbNewLine & s, vbInformation, "Found duplicates"
End Sub

필요에 따라 예제를 수정할 수 있습니다. 예를 들어 n의 상한은 범위의 데이터가있는 마지막 셀의 행 값이거나 True If 조건의 경우 편집하여 복제본을 추출 할 수 있습니다 다른 곳의 가치. 그러나 루틴의 메커니즘은 변경되지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow