Wielkrotone wyszukaj.pionowo

Standardowa funkcja wyszukaj.pionowo mogłaby zwracać wielokrotne wyniki wyszukiwania, czego wszak nie robi. Czasem przydaje się jednak sprawdzenie, czy wyszukiwana fraza (i odpowiadający jej wynik/wyniki) występuje wielokrotnie w obszarze wyszukiwania. Poniższa funkcja, to wyszukaj.pionowo zwracające, po przecinku, wielokrotne wyniki. Drobne różnice w stosunku do oryginału:

  • drugi parametr to kolumna w której szukamy frazy, a nie cała tabela jak w przypadku wyszukaj.pionowo
  • trzeci parametr to numer kolumny z wynikiem, względem kolumny w której wyszukujemy (zwykle mniejszy o 1 w porównaniu z wyszukaj.pionowo)
  • wyszukiwanie zawsze jest dokładne (brak opcji wyszukiwania przybliżonego)

Oryginał znalazłem tu i dostosowałem trochę do współczesnego Excela. Sprowadziłem wyszukiwanie do przeglądania tabeli Variant zamiast obiektu Range, co znacznie przyspiesza działanie funkcji. Dodałem też zgrubne sprawdzanie parametrów wejściowych pod kątem poprawności, ale jak zawsze całości używasz na własne ryzyko.

Public Function MultiVLookup(MatchWith As String, TRange As Range, col_index_num As Integer)
    If (MatchWith = "" Or IsArray(MatchWith) Or TRange.Columns.Count > 1) Then
        MultiVLookup = "#N/A"
        Exit Function
    End If
    Dim SRange As Variant
    Dim MRange As Variant
    Dim i As Integer
    Dim x As String
    SRange = TRange 'searched variant
    MRange = TRange.Offset(0, col_index_num) 'result corresponding to search
    For i = 1 To UBound(SRange)
            If StrComp(CStr(TRange(i, 1)), MatchWith, vbTextCompare) = 0 Then
                x = x & MRange(i, 1) & ", "
            End If
    Next i
    If (x = "") Then
        MultiVLookup = ""
    Else
        MultiVLookup = Left(x, Len(x) - 2)
    End If
End Function