[COLOR=navy]Sub[/COLOR] MG04May27
[COLOR=navy]Dim[/COLOR] Rng [COLOR=navy]As[/COLOR] Range, Dn [COLOR=navy]As[/COLOR] Range, n [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] TxT [COLOR=navy]As[/COLOR] [COLOR=navy]String,[/COLOR] Dt [COLOR=navy]As[/COLOR] Date
[COLOR=navy]Dim[/COLOR] K [COLOR=navy]As[/COLOR] Variant, ac [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] Q [COLOR=navy]As[/COLOR] Variant, c [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] Frac [COLOR=navy]As[/COLOR] Double
c = 1
[COLOR=navy]Set[/COLOR] Rng = Range("A2", Range("A" & Rows.Count).End(xlUp))
[COLOR=navy]With[/COLOR] CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare
[COLOR=navy]For[/COLOR] [COLOR=navy]Each[/COLOR] Dn [COLOR=navy]In[/COLOR] Rng
[COLOR=navy]For[/COLOR] Dt = Dn.Offset(, 2) To Dn.Offset(, 3)
TxT = Dn.Value & ", " & MonthName(Month(Dt), True) & "-" & Right(Year(Dt), 2)
[COLOR=navy]If[/COLOR] Not .Exists(TxT) [COLOR=navy]Then[/COLOR]
Frac = IIf(Dn.Offset(, 4) = 0.5, 0.5, 0)
.Add TxT, Array(Frac, Day(Dt), Dn)
[COLOR=navy]Else[/COLOR]
Q = .Item(TxT)
[COLOR=navy]If[/COLOR] Not Dn.Address = Q(2).Address [COLOR=navy]Then[/COLOR]
Q(0) = Q(0) + IIf(Dn.Offset(, 4) = 0.5, 0.5, 0)
[COLOR=navy]Set[/COLOR] Q(2) = Dn
[COLOR=navy]End[/COLOR] If
[COLOR=navy]If[/COLOR] InStr(Q(1), Day(Dt)) = 0 [COLOR=navy]Then[/COLOR]
Q(1) = Q(1) & "," & Day(Dt)
[COLOR=navy]End[/COLOR] If
.Item(TxT) = Q
[COLOR=navy]End[/COLOR] If
[COLOR=navy]Next[/COLOR] Dt
[COLOR=navy]Next[/COLOR]
[COLOR=navy]Dim[/COLOR] Mystrg [COLOR=navy]As[/COLOR] [COLOR=navy]String[/COLOR]
ReDim Ray(1 To .Count + 1, 1 To 5)
Ray(1, 1) = "Cust ID": Ray(1, 2) = "Type": Ray(1, 3) = "Month-Year": Ray(1, 4) = "Day": Ray(1, 5) = "Total Days"
[COLOR=navy]For[/COLOR] [COLOR=navy]Each[/COLOR] K [COLOR=navy]In[/COLOR] .keys
c = c + 1
Ray(c, 1) = Split(K, ",")(0)
Ray(c, 2) = .Item(K)(2).Offset(, 1)
Ray(c, 3) = Split(K, ",")(1)
Mystrg = .Item(K)(1)
Ray(c, 4) = jTxt(Mystrg)
Ray(c, 5) = UBound(Split(.Item(K)(1), ",")) + 1 - .Item(K)(0)
[COLOR=navy]Next[/COLOR] K
[COLOR=navy]End[/COLOR] With
[COLOR=navy]With[/COLOR] Sheets("Sheet2").Range("a1").Resize(c, 5)
.Value = Ray
.Borders.Weight = 2
.Columns.AutoFit
[COLOR=navy]End[/COLOR] With
[COLOR=navy]End[/COLOR] [COLOR=navy]Sub[/COLOR]
Function jTxt(TxT [COLOR=navy]As[/COLOR] String) [COLOR=navy]As[/COLOR] [COLOR=navy]String[/COLOR]
[COLOR=navy]Dim[/COLOR] n [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] Sp [COLOR=navy]As[/COLOR] Variant, num [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] c [COLOR=navy]As[/COLOR] [COLOR=navy]Long,[/COLOR] Ray(), Q [COLOR=navy]As[/COLOR] Variant
[COLOR=navy]With[/COLOR] CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare
Sp = Split(TxT, ",")
[COLOR=navy]For[/COLOR] n = 0 To UBound(Sp)
[COLOR=navy]If[/COLOR] .Count = 0 [COLOR=navy]Then[/COLOR]
num = 1
[COLOR=navy]ElseIf[/COLOR] n > 0 And Not Val(Sp(n)) = Val(Sp(n - 1)) + 1 [COLOR=navy]Then[/COLOR]
num = num + 1: c = 0
[COLOR=navy]End[/COLOR] If
[COLOR=navy]If[/COLOR] Not .Exists(CStr(num)) [COLOR=navy]Then[/COLOR]
c = c + 1
ReDim Preserve Ray(c)
Ray(c) = Sp(n)
.Add CStr(num), Ray
[COLOR=navy]Else[/COLOR]
Q = .Item(CStr(num))
c = c + 1
ReDim Preserve Q(c)
Q(c) = Sp(n)
.Item(CStr(num)) = Q
[COLOR=navy]End[/COLOR] If
[COLOR=navy]Next[/COLOR]
[COLOR=navy]Dim[/COLOR] K [COLOR=navy]As[/COLOR] Variant, nStr [COLOR=navy]As[/COLOR] [COLOR=navy]String[/COLOR]
[COLOR=navy]For[/COLOR] [COLOR=navy]Each[/COLOR] K [COLOR=navy]In[/COLOR] .keys
nStr = nStr & ", " & IIf(.Item(K)(1) = .Item(K)(UBound(.Item(K))), .Item(K)(1), .Item(K)(1) & "-" & .Item(K)(UBound(.Item(K))))
[COLOR=navy]Next[/COLOR] K
[COLOR=navy]End[/COLOR] With
jTxt = Mid(nStr, 2)
[COLOR=navy]End[/COLOR] Function