Sub test()
Dim a, b, e, s, txt As String, myYear As Long, myMonth, myDate, myItem, myM, n As Long
Dim i As Long, ii As Long, iii As Long, m As Object, sm As Object, x
With Sheets("settings")
myYear = Year(Date): myM = [text(column(a:l)*29,"mmm")]
myMonth = Application.Match(Left$(.[g8], 3), myM, 0)
If myMonth < 10 Then s = "0?" & myMonth Else s = myMonth
myItem = Filter(.[transpose(if(g10:g19<>"",g10:g19))], False, 0)
End With
If Not [isref(result!a1)] Then Sheets.Add(, Sheets("mydata")).Name = "Result"
With Sheets("result")
.Cells.Clear
Sheets("mydata").ListObjects(1).ListColumns(1).Range.Copy .Cells(1)
If .ListObjects.Count Then .ListObjects(1).Unlist
.Columns(1).ColumnWidth = Sheets("mydata").ListObjects(1).ListColumns(1).Range.ColumnWidth
a = .Range("a1").CurrentRegion.Value
With CreateObject("VBScript.RegExp")
.Global = True: .MultiLine = True
.Pattern = "(^|_)((1[3-9]|2[0-9]|3[01])/" & s & "|" & s & _
"/(\d{1,2}))/\d{4}_.*_([^_ ]+)[^_]*_(?=(\d{1,2}/\d{1,2}/\d{4}|$))"
For i = 2 To UBound(a, 1)
txt = a(i, 1): Set a(i, 1) = CreateObject("Scripting.Dictionary")
For Each m In .Execute(txt)
Set sm = m.submatches
myDate = DateSerial(myYear, myMonth, sm(2) + sm(3))
If Not a(i, 1).exists(myDate) Then
Set a(i, 1)(myDate) = CreateObject("Scripting.Dictionary")
End If
If Not a(i, 1)(myDate).exists(sm(4)) Then a(i, 1)(myDate)(sm(4)) = 1
If n < a(i, 1).Count Then n = a(i, 1).Count
Next
Next
ReDim b(1 To UBound(a, 1), 1 To n + UBound(myItem) + 1)
For i = 2 To UBound(a, 1)
For ii = 0 To a(i, 1).Count - 1
s = a(i, 1).keys()(ii)
b(i, ii + 1) = s
For Each e In a(i, 1)(s).keys
x = Application.Match(e, myItem, 0)
If IsNumeric(x) Then b(i, n + x) = b(i, n + x) + 1
Next
Next
Next
End With
With .[a1].CurrentRegion.Columns(2).Resize(, UBound(b, 2))
.Value = b
With .Columns(1).Resize(, n)
.NumberFormatLocal = "mm/dd/yyyy"
.Cells(1) = myM(myMonth)
.Rows(1).HorizontalAlignment = xlCenterAcrossSelection
End With
With .Columns(n + 1).Resize(, UBound(myItem) + 1)
.Rows(1) = myItem
.HorizontalAlignment = xlCenter
End With
.Borders.Weight = 2
.Rows.AutoFit: .Columns.AutoFit
End With
End With
End Sub
Bookmarks