Option Explicit
Sub test()
Dim ar(), br, vResult, i&, j&, r&, c&, strFileName$, strPath$
Dim iPosRow&, dic As Object, strKey$
Application.ScreenUpdating = False
strPath = ThisWorkbook.Path & "\"
strFileName = Dir(strPath & "*.xls")
Do Until strFileName = ""
If strFileName <> ThisWorkbook.Name Then
With GetObject(strPath & strFileName)
r = r + 1
ReDim Preserve ar(1 To 2, 1 To r)
ar(1, r) = Left(strFileName, InStrRev(strFileName, ".") - 1)
ar(2, r) = .Worksheets(1).[A1].CurrentRegion.Value
.Close False
End With
End If
strFileName = Dir
Loop
Set dic = CreateObject("Scripting.Dictionary")
ReDim vResult(1 To 10 ^ 4, 1 To UBound(ar, 2) + 1)
vResult(1, 1) = "产品": r = 1: c = 1
ReDim br(1 To UBound(ar, 2) + 1): br(1) = "合计"
For j = 1 To UBound(ar, 2)
c = c + 1: vResult(1, c) = ar(1, j)
For i = 2 To UBound(ar(2, j))
strKey = ar(2, j)(i, 1)
If Not dic.exists(strKey) Then
r = r + 1
vResult(r, 1) = strKey
dic(strKey) = r
End If
iPosRow = dic(strKey)
vResult(iPosRow, c) = vResult(iPosRow, c) + ar(2, j)(i, 2)
br(c) = br(c) + ar(2, j)(i, 2)
Next i
Next j
r = r + 1
For j = 1 To UBound(br)
vResult(r, j) = br(j)
Next j
[F1].Resize(r, UBound(vResult, 2)) = vResult
Set dic = Nothing
Application.ScreenUpdating = True
Beep
End Sub
|