Výsledky vyhľadávania

Je možné použiť VLOOKUP na vypísanie viacerých hodnôt?

Pomocou funkcie VLOOKUP sa dané údaje nepodarí získať. Tým ale nechcem povedať, že to nie je možné! :)

Ukážeme si 2 spôsoby:

Využitie maticových vzorcov

Najskôr je potrebné povedať, že funkcia TEXTJOIN je podporovaná až od verzie Office 2016 inštalovanej prostredníctvom balíka Office 365. V bežnom Exceli 2016 ju nenájdete.

Máme k dispozícii hárky Table1 a Table2.

Do bunky C2 napíšeme nasledovný vzorec:

=TEXTJOIN(", ";TRUE;IF(Table2!A$2:A$73=Table1!A2;Table2!B$2:B$73;""))

Stlačíme CTRL+SHIFT+ENTER. V bunke by mal byť následne vzorec automaticky uzavretý v zátvorkách {}.

{=TEXTJOIN(", ";TRUE;IF(Table2!A$2:A$73=Table1!A2;Table2!B$2:B$73;""))}

Funkcia TEXTJOIN má 3 argumenty:

Prvé 2 argumenty sú jasné.

V 3. argumente funkcia IF overuje, či niektorá z buniek v rozsahu Table2!A$2:A$73 je zhodná s údajom v bunke Table1!A2. Ak áno, tak vypíše príslušnú hodnotu z daného riadka rozsahu Table2!B$2:B$73. Ak nie, nevypíše nič.

Samozrejme, aby bolo možné vzorec kopírovať a vyhodnocovať všetky údaje, je potrebné správne použiť absolútne a relatívne adresovanie.

Funkcia IF postupne vyhodnocuje porovnanie údajov z Table2 s údajom v bunke A2 - AX2234:

(true; true; true; false; ......................)

Pri hodnote TRUE získame hodnotu zo stĺpca B, pri hodnotu FALSE "". Výsledkom je pole:

("red"; "blue"; "white"; ""; .......................)

Toto pole sa berie ako 3. argument funkcie TEXTJOIN, ktorá údaje pomocou čiarky spojí a prázdne reťazce odignoruje.

Vytvorenie vlastnej funkcie

Tento spôsob sa mi páči viac :) a funguje naprieč rôznymi verziami Excelu.

Vytvoríme si vlastnú funkciu prostredníctvom VBA (ALT+F11) so 4 argumentmi … hladajaspoj(Vyhladavana_hodnota, Hladaj_v_stlpci, Vysledky_zo_stlpca, Oddelovac).

Ospravedlňujem sa za používanie slovenčiny v kóde :).

Function hladajaspoj(Vyhladavana_hodnota As String, Hladaj_v_stlpci As Range, Vysledky_zo_stlpca As Range, Oddelovac As String)
    
    Dim i As Long
    Dim result As String

    For i = 1 To Hladaj_v_stlpci.Count
        If Hladaj_v_stlpci.Cells(i, 1) = Vyhladavana_hodnota Then
            If result = "" Then
                result = Vysledky_zo_stlpca.Cells(i, 1).Value
            Else
                result = result & Oddelovac & Vysledky_zo_stlpca.Cells(i, 1).Value
            End If
        End If
        Next

    hladajaspoj = Trim(result)

End Function

Jednoduché!

Funkciu použijeme rovnako, ako každú inú. Do bunky B2 zadáme =hladajaspoj(A2;Table2!A$2:A$73;Table2!B$2:B$73;", "), stlačíme Enter a vzorec skopírujeme. Výsledok...

Vo funkcii používame cyklus For Next, ktorý slúži na opakovanie príkazov vo vnútri cyklu pre všetky bunky v rozsahu Table2!A$2:A$73.

Vo vnútri cyklu prostredníctvom IF THEN ELSE vyhodnocujeme, či sa vyhľadávaná hodnota (Vyhladavana_hodnota) zhoduje s hodnotou v stĺpci A v Table2 (Hladaj_v_stlpci). Ak áno, tak hodnota zo stĺpca B (Vysledky_zo_stlpca) sa pripojí k aktuálnej hodnote premennej result.

Samozrejme pripájam aj súbor na stiahnutie.

📥 Stiahnuť súbor hladajaspoj2.xlsm

Verím, že som pomohol. :) Ak máte ďalšie otázky, pokojne píšte!