Улучшенная функция VLOOKUP (VLOOKUP2, ВПР2)

Допустим, у нас есть вот такая таблица оформленных кредитов:

Нам необходимо узнать, например, которая была сумма третьего выданного кредита Дмитрия или когда Иван оформил свою вторую сделку. Встроенная функция VLOOKUP (ВПР) умеет искать только первое вхождение фамилии в таблице и нам не поможет.

Напишем свою функцию, которая будет искать не только первое, а, в общем случае, N-е вхождение. Назовем ее, допустим, VLOOKUP2 (ВПР2).

Откройте меню Сервис - Макрос - Редактор Visual Basic, вставьте новый модуль (меню Insert - Module ) и скопируйте туда текст этой функции:

Function VLOOKUP2(Table As Range, SearchColumnNum As Integer, SearchValue As Variant, _
                                        N As Integer, ResultColumnNum As Integer)        
    Dim i As Integer
    Dim iCount As Integer
       
    For i = 1 To Table.Rows.Count
            If Table.Cells(i, SearchColumnNum) = SearchValue Then
                iCount = iCount + 1
            End If
            If iCount = N Then
                VLOOKUP2 = Table.Cells(i, ResultColumnNum)
                Exit For
            End If
        Next i
End Function 

Закройте редактор Visual Basic и вернитесь в Excel.

Теперь в Мастер функций в категории Определены пользователем можно найти нашу функцию VLOOKUP2 и воспользоваться ею. Синтаксис функции следующий:

= VLOOKUP2 ( таблица; номер_столбца_где_ищем ; искомое_значение номер_входжения ; номер_столбца_с_которого_берём_значение )

То есть для того, чтобы найти сумму выданного Дмитрием третьего кредита, нужно ввести:

=VLOOKUP2(A2:A19;1;"Дмитрий";3;4)