'VBA 중복검사'에 해당되는 글 1건

728x90

자체셀내의 중복여부 검사



엑셀 데이터가 많을 경우 기준열(Column)에 반복된 값이 얼마나 들어 있는지 검사하는 VBA 코드이다.

가져다 활용하실 경우 검사열 열만 변경, 중복이라고 내용을 뿌릴 열만 지정하세요.

어떻게 처리되는지 확인은 F8키를 눌러서 순차적으로 실행되는 것을 확인하면 된다.

중복검사할 때 엑셀함수 CountIF 를 사용하듯이, VBA 에서도 엑셀에서 기본 제공하는 countif 함수를 이용할 수 있다. 이용하는 방법은 application.countif(범위,조건) 을 주면 된다.

rngC.Offset(0, rngT) = "중복" 와 같이 offset(행,열) 을 이용하기도 하지만,

Cells(행,열) 사용하면 직관적으로 이해하기 쉽다. Cells(rngC.Row,"D") = "중복" 이라고 하면 D열에 표시가 되는구나 하고 이해할 수 있다.


Sub 자체셀내의중복검사()
    Dim rngCh           '// 입력할 열 글자
    Dim rngC    As Range   '// 한 행(Row)씩 변하는 변수 지정
    Dim rngTarget As Range '// 대상 범위 지정변수
    Dim sRow As Integer '// 열을 직접 지정하지 않고 ActiveCell 기준으로 정하고자 할 때
    Dim rngT As Integer     '// 결과값을 표시할 위치 지정할 변수
    Dim oldTime As Single
       

    Application.ScreenUpdating = False  '//화면 업데이트 일시 정지, 이걸 지정해줘야 매우 빠르게 처리함

    oldTime = Timer
       
    rngCol = "C"   
    Set rngTarget = Range(
Cells(2, rngCol), Cells(Rows.Count, rngCol).End(3))
    '// End(3) 은 End(xlUp) 으로 엑셀이 제공하는 총 행의 수로부터 위로 이동하라는 명령
    '// End(3)(2) 는 값이 있는 마지막행의 offset(1,0) 과 같은 의미로 바로 아래 행을 의미
    
    'ActiveCell.Select  '// ActiveCell 있는 셀 기준으로 중복검사를 할 경우
    'Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
   
    rngT = 3  '// 검사하는 열로부터 몇번째 열에 중복이라는 글자를 표시할 것인가?
  
    For Each rngC In rngTarget
       
rngC.Offset(0, rngT).ClearContents
       
rngC.Font.Bold = False
       
rngC.Offset(0, rngT + 1).ClearContents
       
        If Application.CountIf(rngTarget,
rngC.Value) > 1 Then   '// 중복 개수가 2개 이상인 것만
           
rngC.Font.Bold = True
           
rngC.Offset(0, rngT) = "중복"
           
rngC.Offset(0, rngT + 1) = Application.CountIf(rngTarget, rngC.Value)
        End If
    Next rngC
    
    Set
rngTarget = Nothing     '// 변수 초기화
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"

End Sub


Countif_VBA-01.vbs



자료가 방대한 경우 어느정도 시간이 걸리는지 체크해보려고 넣었다

첨부파일은 텍스트파일이므로 수정해서 사용하시면 됩니다.


블로그 이미지

Link2Me

,