'연속중복 VBA'에 해당되는 글 1건

728x90

[VBA] 연속되는 값의 몇번이나 나왔는지의 최대값 구하기



연속되는 값의 최대값 구하는 VBA 수식을 만들어봤습니다.

조건이 없는 최대값을 구하는 함수는 Application.Max 함수를 호출해서 구하면 쉽게 구해집니다.

조건이 있는 경우는 DMax 함수를 사용하면 되는 거 같은데 이건 아직 못해봤구요.

일단 허접하게 구현을 해봤습니다.


Sub MAX_Duplicate_Cnt()
    Dim rngCh, rngT           '// 입력할 열 글자
    Dim i As Integer   '// 한 셀씩 변하는 변수 지정
    Dim endRow As Integer   '// 최대 Row 수 구하는 변수 지정
    Dim Cnt, Max_Cnt1, Max_Cnt2 As Integer
    Dim oldTime As Single   '// 걸린 시간 구하는 변수 지정
   
    oldTime = Timer     '// 시간 변수 설정, 필요없으면 콤마(,)로 disable
    rngCh = "B"         '// 검사할 열
    endRow = Cells(Rows.Count, rngCh).End(3).Row
    rngT = "C"          '// 결과를 뿌려줄 열
    Cnt = 1             '// 초기 카운트
    Max_Cnt = 1

    For i = 1 To endRow - 1
        If Cells(i, rngCh).Value = Cells(i + 1, rngCh).Value Then
            Cells(i + 1, rngT).Value = Cnt + Cells(i, rngT).Value
           
            '// 아래는 같은 값을 가진 연속된 개수의 최대값을 구하는 수
            If Cells(i + 1, rngCh).Value = "O" Then
                If Max_Cnt1 < Cells(i + 1, rngT).Value Then
                    Max_Cnt1 = Cells(i + 1, rngT).Value
                End If
            Else
                If Max_Cnt2 < Cells(i + 1, rngT).Value Then
                    Max_Cnt2 = Cells(i + 1, rngT).Value
                End If
            End If
           
        Else
            Cells(i + 1, rngT).Value = 1
           
        End If
    Next i
   
    Cells(8, "F").Value = Max_Cnt1
    Cells(9, "F").Value = Max_Cnt2
 
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"

End Sub

처리결과 화면은


하지만 구해야 할 값이 딱 2개만 있는 경우가 아니라면 최대값은 수식으로 넣도록 하고 필터를 걸어서 확인하는 방법이 더 좋을 수도 있다고 봅니다.

서로 다른 모든 변수들을 자동으로 찾아서 계산한다음에 넣는 방법은 아직 모르겠네요..


첨부파일은


연속중복검사.xlsm



블로그 이미지

Link2Me

,