안녕하세요 일전에 함수 패턴 vba 질문을 드렸었는데
앞전에 질문드린 내용이
이런식으로 답변을 달아주셨습니다.
그런데 여기에서 같은 패턴이 최대 몇번 연속으로 나왔는지 그리고 패턴이 다르다면 다른 값도 최대 몇번으로 나왔는지도 추출하고 싶은데 엑셀로 정리하면 이런식으로 정리됩니다
b1이 1인데 b1+1이 a1인 0이고 c+1이 b1인 1인데 서로 다른 값이라 x2이고 그다음 b1c1이 11인데 b1c1+1은 a1=0 인데 b1c1과 같은 다음 패턴이 c1d1이고 그앞의 값(b1)이 1이라서 서로다른 결과값이 나옵니다 그런데 여기서 그치지 않고 다음 b1c1과 같은 패턴을 또 찾고 그걸 찾으면 f1g1인데 그 앞의 값(e1)은 0이라서 앞전 c1d1 앞의값(b1=1)과 다른 값이 되어 또 x가 나옵니다 그 다음 같은 패턴은 p1q1인데 앞의 값(O1)이 0이라서 F1G1 앞의 값과 같아 다른 패턴이 연속된건 총 X3로 끝납니다 앞의 매크로 식과 같은데 여기서 최대 횟수만 추가 하고 싶어요 이런식으로 정리된 vba식을 만들어 볼수 있을까요

안녕하세요~
아래 질문에 더해서
OX 패턴의 갯수를 파악하고자 하시네요.
Option Explicit Public Sub PatMX() On Error GoTo EH Dim ws As Worksheet: Set ws = ActiveSheet Dim eRow As Long: eRow = 1 '// 데이터 행 Dim bCol As Long: bCol = 2 '// B열 Dim oCol As Long: oCol = 1 '// 출력 시작열(A) Dim lRow As Long: lRow = 4 '// 라벨 행 Dim rRow As Long: rRow = 5 '// 결과 행 Dim lc As Long, eCol As Long lc = ws.Cells(eRow, ws.Columns.Count).End(xlToLeft).Column If lc <= bCol Then Exit Sub Dim arr As Variant arr = ws.Range(ws.Cells(eRow, 1), ws.Cells(eRow, lc)).Value2 eCol = UBound(arr, 2) If eCol <= bCol Then Exit Sub Dim n As Long: n = eCol - bCol + 1 If n < 2 Then Exit Sub '// 라벨 100개 제한 Dim m As Long: m = 100 If m > n Then m = n Dim mx As Long mx = ws.Columns.Count - oCol + 1 If m > mx Then m = mx If m < 1 Then Exit Sub '// B~끝을 Byte('0'/'1')로 Dim sB() As Byte ReDim sB(1 To n) Dim i As Long, v As Variant For i = 1 To n v = arr(1, bCol + i - 1) If v = 1 Or v = "1" Then sB(i) = 49 Else sB(i) = 48 Next i Dim out As Variant ReDim out(1 To 2, 1 To m) Dim lab As String: lab = "" Dim L As Long For L = 1 To m '// 라벨 lab = lab & ColT(bCol + L - 1) out(1, L) = LCase$(lab) & "1" '// O/X 연속최대 out(2, L) = RunMX(arr, sB, bCol, eCol, n, L) Next L ws.Range(ws.Cells(lRow, oCol), ws.Cells(rRow, oCol + m - 1)).Value = out Exit Sub EH: MsgBox "오류 " & Err.Number & vbCrLf & Err.Description, vbCritical End Sub '// 길이 L 패턴의 모든 출현을 스캔하고, O/X 연속최대 반환 Private Function RunMX(ByRef arr As Variant, ByRef sB() As Byte, _ ByVal bCol As Long, ByVal eCol As Long, _ ByVal n As Long, ByVal L As Long) As String Dim lim As Long: lim = n - L + 1 If lim < 2 Then RunMX = "O0/X0" Exit Function End If Dim pLf As Variant: pLf = arr(1, bCol - 1) '// 첫 출현(s=1)의 좌측값 = A1 Dim cLf As Variant Dim curO As Long, curX As Long, mxO As Long, mxX As Long curO = 0: curX = 0: mxO = 0: mxX = 0 Dim s As Long, k As Long Dim ok As Boolean '// s=2..lim에서 접두(1..L)와 동일한 출현을 모두 찾음 For s = 2 To lim ok = True For k = 0 To L - 1 If sB(1 + k) <> sB(s + k) Then ok = False Exit For End If Next k If ok Then '// 출현 시작열 = bCol + s - 1, 좌측값 열 = bCol + s - 2 Dim c As Long: c = bCol + s - 2 If c >= 1 And c <= eCol Then cLf = arr(1, c) If CStr(cLf) = CStr(pLf) Then curO = curO + 1 curX = 0 If curO > mxO Then mxO = curO Else curX = curX + 1 curO = 0 If curX > mxX Then mxX = curX End If pLf = cLf End If End If Next s RunMX = "O" & mxO & "/X" & mxX End Function '// 열번호 -> 열문자 Private Function ColT(ByVal c As Long) As String Dim t As Long, m As Long, s As String t = c Do While t > 0 m = (t - 1) Mod 26 s = Chr$(65 + m) & s t = (t - 1) \ 26 Loop ColT = s End Function너무 감사합니다 수메리안님!!