Решил. Добавил разграничение файлов по датам и сложение значений которые там добавляются
Вот что получилось, намного удобней чем PQ
Вот что получилось, намного удобней чем PQ
| Код |
|---|
Sub Результат_doober()
Dim avFiles, Sh As Worksheet, key, ShIn As Worksheet
Set C_rab = CreateObject("scripting.dictionary")
Set C_is = CreateObject("scripting.dictionary")
Set Sh = ThisWorkbook.Worksheets("Свод")
LastRow = Sh.Cells(Sh.Rows.count, "C").End(xlUp).Row
LastColl = Sh.Cells(2, Sh.Columns.count).End(xlToLeft).column
hd = Sh.Cells(2, 1).Resize(1, LastColl)
dx = Sh.Cells(1, 3).Resize(LastRow, 2)
For n = 3 To UBound(hd, 2)
key = hd(1, n)
If IsDate(key) Then
C_is.Item(CDate(key)) = n
End If
Next
For n = 3 To UBound(dx)
key = dx(n, 1) & ""
C_rab.Item(key) = n
Next
'по умолчанию к выбору доступны файлы Excel(xls,xlsx,xlsm,xlsb)
avFiles = Application.GetOpenFilename _
("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , True)
If VarType(avFiles) = vbBoolean Then
'была нажата кнопка отмены - выход из процедуры
Exit Sub
End If
'avFiles - примет тип String
Dim i, j
Application.ScreenUpdating = False
For Each x In avFiles
Set ShIn = Workbooks.Open(x).Worksheets(1)
key = CDate(ShIn.Range("d3"))
If C_is.Exists(key) Then
LastRow = ShIn.Cells(Sh.Rows.count, "C").End(xlUp).Row
dz = ShIn.Range("C1").Resize(LastRow, 2)
cl = C_is.Item(CDate(key))
For i = 6 To UBound(dz)
key = dz(i, 1) & ""
Sum = dz(i, 2)
If C_rab.Exists(key) Then
rw = C_rab.Item(key)
Sh.Cells(rw, cl) = Sh.Cells(rw, cl) + Sum
End If
Next
End If
ShIn.Parent.Close (False)
Next
Application.ScreenUpdating = True
End Sub
|