Sub test()
Dim myDir$, x, myList()
myDir = "C:\Users\ABB\Desktop\data"
If Dir(myDir, vbDirectory) = "" Then MsgBox "Wrong folder path", vbCritical: Exit Sub
x = SearchFiles(myDir, "*", 0, myList)
If IsError(x) Then MsgBox "No file found", vbInformation: Exit Sub
GetDetails myList
End Sub
Function SearchFiles(myDir$, myFileName$, n&, myList)
Dim fso As Object, myFolder As Object, myFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each myFile In fso.GetFolder(myDir).Files
If (Not myFile.Name Like "~$*") * (myFile.Name <> ThisWorkbook.Name) _
* (myFile.Name Like myFileName) Then
If fso.GetExtensionName(myFile.Name) <> "" Then
n = n + 1
ReDim Preserve myList(1 To 3, 1 To n)
myList(1, n) = myDir
myList(2, n) = LCase$(fso.GetExtensionName(myFile.Name))
myList(3, n) = Format$(myFile.DateLastModified, "yyyy - mm")
End If
End If
Next
For Each myFolder In fso.GetFolder(myDir).SubFolders
SearchFiles = SearchFiles(myFolder.Path & "\", myFileName, n, myList)
Next
If n Then
SearchFiles = myList
Else
SearchFiles = CVErr(2024)
End If
End Function
Sub GetDetails(myList)
Dim a, i&, ii&, s$, dic As Object, AL As Object, x As Object
Set dic = CreateObject("Scripting.Dictionary")
Set AL = CreateObject("System.Collections.ArrayList")
Set x = AL.Clone
For i = 1 To UBound(myList, 2)
If Not AL.Contains(myList(3, i)) Then AL.Add myList(3, i)
If Not x.Contains(myList(2, i)) Then x.Add myList(2, i)
s = Join(Array(myList(2, i), myList(3, i)), Chr(2))
dic(s) = dic(s) + 1
Next
AL.Sort: x.Sort
ReDim a(1 To AL.Count + 1, 1 To x.Count + 1)
a(1, 1) = "M - Y / EXT"
For i = 0 To AL.Count - 1
a(i + 2, 1) = AL(i)
Next
For i = 0 To x.Count - 1
a(1, i + 2) = x(i)
Next
For i = 2 To UBound(a, 1)
For ii = 2 To UBound(a, 2)
a(i, ii) = dic(Join(Array(a(1, ii), a(i, 1)), Chr(2)))
Next ii, i
[a1].Resize(UBound(a, 1), UBound(a, 2)) = a
End Sub