Немного изменил код UDF, т.к. смотрю формулу используют и в других задачах, где может быть критично то, что между критериями нет разделителя (в вопросе темы это роли не играло, другие данные).
Т.е. в коде в файле могут перепутаться сравниваемые пары вида 123 123 и 12 3123
С новым кодом такого не произойдёт.
Формулу теперь писать вида
=VLOOKUPCOUPLE_spec($A$3:$C$40;1;3;J3&"|"&"-";2;", ")
т.е. между критериями добавлять разделитель "|"
Function VLOOKUPCOUPLE_spec(Table As Variant, SearchColumnNum1 As Integer, SearchColumnNum2 As Integer, SearchValue As Variant, _
RezultColumnNum As Integer, Separator_ As String)
'Table - таблица, где ищем
'SearchColumnNum1/2 - столбцы, где ищем
'SearchValue - данные, которые ищем, задавать с "|" посередине
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце
Dim i As Long
Select Case TypeName(Table)
Case "Range"
For i = 1 To Table.Rows.Count
If Table.Cells(i, SearchColumnNum1) & "|" & Table.Cells(i, SearchColumnNum2) = SearchValue Then
If VLOOKUPCOUPLE_spec <> "" Then
VLOOKUPCOUPLE_spec = VLOOKUPCOUPLE_spec & Separator_ & Table.Cells(i, RezultColumnNum)
Else
VLOOKUPCOUPLE_spec = Table.Cells(i, RezultColumnNum)
End If
End If
Next i
Case "Variant()"
For i = 1 To UBound(Table)
If Table.Cells(i, SearchColumnNum1) & "|" & Table.Cells(i, SearchColumnNum2) = SearchValue Then
If VLOOKUPCOUPLE_spec <> "" Then
VLOOKUPCOUPLE_spec = VLOOKUPCOUPLE_spec & Separator_ & Table(i, RezultColumnNum)
Else
VLOOKUPCOUPLE_spec = Table(i, RezultColumnNum)
End If
End If
Next i
End Select
If VLOOKUPCOUPLE_spec = 0 Then VLOOKUPCOUPLE_spec = ""
End Function