본문 바로가기
WeekdayLife/excel

[엑셀VBA] 중복값 처리 여러가지 방법 중 무엇을...

by JO_i 2023. 2. 13.

중복값 처리

중복값을 확인하는 이유는 너무도 많기 때문에, 어떻게 처리할 것인지에 따라, 다양한 방법이 있으리라.

아래와 같은 간단한 원본 데이터에 대하여, 자주 쓰는 몇가지 방법을 요약해 보았다.

 

 

 

COUNTIF

아래 수식만으로도 중복값을 알아낼 수 있으며, 자기 자신을 배제해야하니, 결과값이 2이상인 경우 중복이라 볼 수 있다.

중복된 수량을 직관적으로 알 수 있으며, 정렬을 통해 손쉽게 후처리가 가능하다.

=COUNTIF($B$3:$B$11,B3)

아래와 같은 식으로 결과값을 조정할 수 있고, 조건부 서식을 병행하여 색으로 구분할 수도 있다.

=IF(COUNTIF($B$3:$B$11,B3)>1,COUNTIF($B$3:$B$11,B3)&"개 중복","유니크")

 

단점은 다른 열을 하나 더 사용해야한다는 점이겠다.

 

 

 

중복된항목 제거

중복된 항목만 남기고, 행을 지워버리는 기능으로, 데이터 탭의 중복된 항목제거 버튼이 있다.

값이 삭제되므로, 원본데이터에 사용하는 것은 별로이고, 주로, 값을 따서, 요약테이블 등을 새로 만든 후, 배열함수 등의 조건을 만들때 사용한다.

 

 

조건부 서식

색이나 서식을 지정하여 중복값을 처리할 떄 사용한다.

아는 사람은 알겠지만, 조건부 서식은 이름정의와 함께 여러명이 작업할 떄, 파일을 뒤죽박죽으로 만드는 원흉이 되곤한다.

 

 

 

자작 매크로

조건부 서식과 동일한 기능을 매크로로 지정하여 사용하는 방법이 있다.

아래 코드로, 중복이 발생하는 경우, 첫번째 값을 제외한 값부터 칠하거나, 모두 칠하는 것이 가능하다.

 

Private Sub checkDuplication()

Dim myrng As Range
Dim colorCheck As Boolean

On Error GoTo dd

'range 설정 : myrng
Set myrng = Application.InputBox("중복여부를 확인할 영역을 선택하세요", , , , , , , 8)

'중복체크방식 설정
If MsgBox("중복값 모두에 색칠을 하고 싶으면 yes, 첫번째 값에는 색을 칠하지 않으려면 no를 누르세요", vbYesNo) = vbYes Then
    colorCheck = True
Else
    colorCheck = False
End If

'range 갯수 세기 : myrangeCount
myrangeCount = myrng.Count

'cell check 그리고 색칠하기
For i = 1 To myrangeCount
    counter = 0
    For j = 1 To myrangeCount
        If myrng(i) = myrng(j) Then
            counter = counter + 1
            If counter >= 2 Then
                If colorCheck = True Then
                    myrng(i).Interior.ColorIndex = 4
                    myrng(j).Interior.ColorIndex = 4
                Else
                    myrng(j).Interior.ColorIndex = 4
                End If
               
            End If
        End If
    Next j
Next i

dd:

End Sub

 

 

이상 여러가지 방법이 있는데, 그만큼 중요한 것이겠다.

상황에 맞게 잘 선택하여 사용하자.