안녕하세요.
자주 찾는 커뮤니티 사이트에 엑셀 관련 질문이 올라와 있었습니다.
www.clien.net/service/board/kin/16003781?od=T31&po=6&category=0&groupCd=community
엑셀에서 중복값 강조와 제거를 같이 할 수 있을까요? : 클리앙
제가 원하는건 중복이 있었던건 표시된 후, 하나만 남기고 삭제되는건데용 중복값 표시 후 중복값 제거하면 중복되는 데이터가 없기 때문에 표시가 사라집니다 ㅠ countif를 써서 다른 셀에서 중
www.clien.net
이미 답글이 달려 있었고, VBA로 처리한 댓글도 있었습니다.
VBA 반복문으로 처리하는 작업입니다.
Sub 중복제거얍()
Dim i As Double
Dim j As Double
Dim firstRow As Double
Dim lastRow As Double
Dim countIt As Double
Dim tempStr As String
lastRow = Range("A" & Rows.count).End(xlUp).Row
[A:A].Sort [A2], 2, Header:=xlYes
Range("b:b").ClearContents
Do While Range("a1").Offset(j) <> ""
If Range("a1").Offset(j) = Range("a1").Offset(j + 1) Then
Range("a1").Offset(j).Interior.ColorIndex = 8
tempStr = Range("a1").Offset(j)
i = 1
'중복개수세라 얍!
Do While Range("a1").Offset(j + i) = tempStr
countIt = countIt + 1
i = i + 1
Loop
Range("b1").Offset(j) = countIt + 1
Else
Range("b1").Offset(j) = 1
End If
'For i = k To j + 1 Step -1
'If Range("a" & i) = tempStr Then
'Range("a" & i).EntireRow.Delete
'Range("a" & j).Interior.ColorIndex = 8
'End If
'Next i
j = j + 1 + countIt
tempStr = ""
countIt = 0
Loop
[A:B].Sort [B2], 2, Header:=xlYes
firstRow = Range("B" & Rows.count).End(xlUp).Row
Rows(firstRow + 1 & ":" & lastRow).EntireRow.Delete
Range("b1") = "중복개수에용"
End Sub
엑셀 기능으로도 가능한 작업이라 매크로를 기록해 새로운 방법을 써 보았습니다.
엑셀 기능 중 COUNTIF 함수로 중복 항목 검사해 필터로 중복 항목에만 채우기 색을 적용하고 [중복된 항목 제거]로 삭제하도록 매크로를 작성했습니다.
Sub 중복()
'
' 중복 매크로
'
'
Range("B1").Value = "중복"
마지막행 = Range("A2").End(xlDown).Row
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Goto Reference:="R2C2:R" & 마지막행 & "C2"
Selection.FormulaR1C1 = "=COUNTIF(R2C1:R" & 마지막행 & "C1,RC[-1])"
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
Application.CutCopyMode = False
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$" & 마지막행).AutoFilter Field:=2, Criteria1:=">1", _
Operator:=xlAnd
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Interior.Color = 65535
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$" & 마지막행).RemoveDuplicates Columns:=1, Header:= _
xlYes
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
다양한 환경에서도 적용할 수 있도록 매크로를 조금 수정했습니다.
완성 파일 다운로드
VBA 실행 속도는 위 반복문으로 처리한 것이 좀 더 빨랐습니다.
아래 매크로 기록으로 만든 코드도 좀 더 줄일 수 있을 테지만 많이 바꾸지 않았습니다.
'엑셀' 카테고리의 다른 글
Worksheet _change 이벤트를 이용해 값이 바뀌면 자동으로 작업 처리하기 (0) | 2021.07.28 |
---|---|
거래내역 중 취소된 항목을 찾아서 표시하는 VBA (0) | 2021.04.04 |
전체 명단에 없는 항목 나타내기 (0) | 2021.03.11 |
VLOOKUP 함수와 MATCH 함수의 마지막 인수 이해하기 (0) | 2021.02.24 |
주어진 범위 평균 구하기 - 사용자 지정 함수 (0) | 2021.02.24 |