Надстройка PLEX для Microsoft Excel 2007-2021 и Office 365

Функция VLOOKUP2

12626 13.06.2016
Функция VLOOKUP2

Данная функция является усовершенствованным вариантом стандартной функции ВПР (VLOOKUP). В отличие от ВПР эта функция умеет производить поиск не только в крайнем левом столбце таблицы и выдавать не только первое найденное, а любое (N-ое) искомое значение.

На практике такая функция позволяет решать очень много задач:

VLOOKUP2

Синтаксис

=VLOOKUP2(Table; SearchColumnNum; SearchValue; N; ResultColumnNum)

где

  • Table - диапазон ячеек, в котором производится поиск и последующая выборка значений
  • SearchColumnNum - порядковый номер столбца диапазона Table, в котором производится поиск искомого значения
  • SearchValue - искомое значение, которое ищется в столбце SearchColumnNum диапазона Table
  • N - порядковый номер вхождения искомого значения
  • ResultColumnNum - порядковый номер столбца таблицы Table из которого берется нужное нам значение

Полный список всех инструментов надстройки PLEX



01.06.2018 20:11:39
По аналогии, вот ВПР с поиском по 3-ём критериям:


Function Vlookup3Criteria(Table As Variant, SearchColumnNum1 As Long, SearchValue1 As Variant, SearchColumnNum2 As Long, SearchValue2 As Variant, SearchColumnNum3 As Long, SearchValue3 As Variant, N As Long, ResultColumnNum As Long)
    Dim i As Long, iCount As Long
    Select Case TypeName(Table)
    Case "Range"
        For i = 1 To Table.Rows.Count
            If Table.Cells(i, SearchColumnNum1) = SearchValue1 And Table.Cells(i, SearchColumnNum2) = SearchValue2 And Table.Cells(i, SearchColumnNum3) = SearchValue3 Then
                iCount = iCount + 1
            End If
            If iCount = N Then
                Vlookup3Criteria = Table.Cells(i, ResultColumnNum)
                Exit For
            End If
        Next i
    Case "Variant()"
        For i = 1 To UBound(Table)
            If Table.Cells(i, SearchColumnNum1) = SearchValue1 And Table.Cells(i, SearchColumnNum2) = SearchValue2 Then iCount = iCount + 1
            If iCount = N Then
                Vlookup3Criteria = Table(i, ResultColumnNum)
                Exit For
            End If
        Next i
    End Select
End Function
 
Для значения N можно использовать функцию "=СЧЁТЕСЛИМН" соответственно нужно будет задавать в функции 3 параметра. В моём случае это выглядит так:

=Vlookup3Criteria(A10:E1498;1;A4;2;"Включить";3;A5;ЕСЛИ(ЕПУСТО(A4);"";СЧЁТЕСЛИМН(A10:A1498;A4;B10:B1498;"Включить";C10:C1498;A5));5)
 
эта формула ищет последнее повторяющееся значение по трём параметрам "Название компании", "Тема обращения", "Услуга" и выводит последний номер бланк-заказа соответствующий заданным условиям. По сути аналог функции "=ИНДЕКС+ПОИСКПОЗ", с разницей в том, что строку искомого значения можно задавать в ручную или высчитывать автоматически.

Синтаксис аналогичный, просто значения "SearchColumnNum" и " SearchValue " повторяются три раза друг за другом.



А следующий макрос+формула выводят ссылку на документ найденного значения, конечно при условии что эта ссылка уже есть где-то в базе данных.


 Function Получить_ссылку(ByVal rCell As Range) As String
    Dim s As String
    If rCell.Hyperlinks.Count = 0 Then
        If Mid$(rCell.Formula, 2, 9) = "HYPERLINK" Then
           Получить_ссылку = Mid$(rCell.Formula, 13, InStr(13, rCell.Formula, Chr(34)) - 13)
        Else
           Получить_ссылку = "В ячейке нет гиперссылки"
        End If
    Else
        s = rCell.Hyperlinks(1).SubAddress
        If s <> "" Then s = "#" & rCell.Hyperlinks(1).SubAddress
        Получить_ссылку = rCell.Hyperlinks(rCell.Hyperlinks.Count).Address & s
    End If
End Function
добавляем сюда вышеупомянутые "ИНДЕКС" и "ПОИСКПОЗ" и получаем это: =Получить_ссылку(ИНДЕКС(M:M;ПОИСКПОЗ(P3&P4&P5;E:E&A:A&C:C;0))) компенсирую длинное значение следующей функцией:
=ГИПЕРССЫЛКА('Отчёт 8'!P2;"click here")
09.09.2023 17:53:32
Вопрос всеми прежде всего Павлову Николаю:
1. ВПР (VLOOKUP) позволяет производить т.н. приблизительный поиск, а VLOOKUP2 - не позволяет,
поэтому не может являться полноценной заменой.
Какое-нибудь решение есть ?
2. Касаемо сравнения скорости работы ВПР (VLOOKUP) и VLOOKUP2
на некоем тестовом стенде с тестовым массивом данных, например  1 млн. строк при прочих равных условиях.
Тестовое сравнение проводилось ? каков результат ?желательно с точностью 1 мс.
11.09.2023 15:07:11
1. Написать свою функцию или установить Excel 2021, где есть улучшенная версия ВПР в виде функции ПРОСМОТРХ.
2. Любая пользовательская функция написанная на VBA будет в разы медленнее, чем встроенная - по определению.  
Наверх