Как вы и просили в своих комментариях, вот более эффективная версия, которая делает то, что вы пытаетесь сделать:
Sub OnClick()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("PLANNER_ONGOING_DISPLAY_SHEET")
Set ws2 = ThisWorkbook.Sheets("REPORT_DOWNLOAD")
Dim arr_1 As Variant, arr_2 As Variant, arr_result As Variant
arr_1 = ws1.Range("C2:C" & ws2.Range("L" & ws2.Rows.Count).End(xlUp).Row).Value2
arr_2 = ws2.Range("E2:L" & ws2.Range("E" & ws2.Rows.Count).End(xlUp).Row).Value2
ReDim arr_result(LBound(arr_2) To UBound(arr_2), 1 To 3)
Dim i As Long, j As Long
For i = LBound(arr_1, 1) To UBound(arr_1, 1)
For j = LBound(arr_2, 1) To UBound(arr_2, 1)
If arr_1(i, 1) = arr_2(j, 1) Then
'use this if you're handling numbers
arr_result(i, 1) = arr_result(i, 1) + arr_2(j, 5)
arr_result(i, 2) = arr_result(i, 2) + arr_2(j, 4)
arr_result(i, 3) = arr_result(i, 3) + arr_2(j, 8)
'use this if you're handling strings
arr_result(i, 1) = arr_result(i, 1) & arr_2(j, 5)
arr_result(i, 2) = arr_result(i, 2) & arr_2(j, 4)
arr_result(i, 3) = arr_result(i, 3) & arr_2(j, 8)
End If
Next j
Next i
ws1.Cells(2, 18).Resize(UBound(arr_result, 1), 3).Value2 = arr_result
End Sub
Эта процедура помещает все соответствующие данные в массивы и записывает нужные результаты в arr_result
. Затем все значения, хранящиеся в arr_result
, помещаются в ваш выходной диапазон.