[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개만 있는 경우가 아니라면 최대값은 수식으로 넣도록 하고 필터를 걸어서 확인하는 방법이 더 좋을 수도 있다고 봅니다.
서로 다른 모든 변수들을 자동으로 찾아서 계산한다음에 넣는 방법은 아직 모르겠네요..
첨부파일은
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 셀 분리하여 현재 시트에 뿌리기 (2) | 2014.01.18 |
---|---|
[VBA] 연속되는 값의 증가 최대값 모두 구하기 (0) | 2014.01.14 |
[VBA응용] VLookup VBA 이용한 예제 1 (3) | 2014.01.11 |
[VBA기초] 공백제거 및 첫글자 대문자로 변경 (0) | 2014.01.08 |
[VBA] Vlookup 함수 VBA 로 업무를 편하게 (16) | 2013.12.23 |