Может быть так?
Объявление коллекции убрал - она ведь там нигде не использовалось...
Sub AllWishes()
Dim iFile As String, iLastRow As Long, Kod1$, Kod2$, Kod3$, LastRow As Long
Dim i As Long, j As Long, Arr()
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
'Range(Cells(2, 2), Cells(iLastRow + 1, 3)).ClearContents
With Application.FileDialog(msoFileDialogFilePicker)
If .Show = False Then Exit Sub
iFile = .SelectedItems(1)
End With
Application.ScreenUpdating = False
Workbooks.Open iFile
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Arr = Range(Cells(3, 1), Cells(iLastRow, 12)).Value
ActiveWorkbook.Close False
iLastRow = 1
LastRow = Cells(Rows.Count, 11).End(xlUp).Row 'столец в котором находится значение, которое нужно извлечь из отчета
For i = 2 To LastRow
Kod1 = Cells(i, 10)
Kod2 = Cells(i, 11)
Kod3 = Cells(i, 12)
For j = LBound(Arr, 1) To UBound(Arr, 1) 'InStr(1,Arr(j, 1),"МТС")<>0
If Arr(j, 5) = Kod1 Then
If InStr(1, Arr(j, 1), "MTCЕ") <> 0 Then ' второе значение в скобках, это номер столбца
If InStr(1, Arr(j, 1), "потребительчастное лицо") <> 0 Then
Cells(iLastRow + 1, 2) = Kod
Cells(iLastRow + 1, 3) = Cells(iLastRow + 1, 3) + Arr(j, 8)
End If
End If
End If
If Arr(j, 5) = Kod2 Then
If InStr(1, Arr(j, 1), "МОФ") <> 0 Then ' второе значение в скобках, это номер столбца
If InStr(1, Arr(j, 1), "потребительчастное лицо") <> 0 Then
Cells(iLastRow + 1, 4) = Kod
Cells(iLastRow + 1, 5) = Cells(iLastRow + 1, 5) + Arr(j, 8) 'второе значение после запятой, это столбец куда выводится результат
End If
End If
End If
If Arr(j, 5) = Kod3 Then
If InStr(1, Arr(j, 1), "ЗАО") <> 0 Then ' второе значение в скобках, это номер столбца
If InStr(1, Arr(j, 1), "потребительчастное лицо") <> 0 Then
Cells(iLastRow + 1, 6) = Kod
Cells(iLastRow + 1, 7) = Cells(iLastRow + 1, 7) + Arr(j, 8)
End If
End If
End If
Next
iLastRow = iLastRow + 1
Next
Application.ScreenUpdating = True
End Sub
Можно вместо if/then поставить select case, но особой выгоды имхо не принесёт.