
Resumé
For at udtrække flere matches til separate celler i separate kolonner kan du bruge en matrixformel baseret på INDEX og SMALL. I det viste eksempel er formlen i F5:
(=IFERROR(INDEX(names,SMALL(IF(groups=$E5,ROW(names)-MIN(ROW(names))+1),COLUMNS($E$5:E5))),""))
Dette er en matrixformel og skal indtastes med Control + Shift + Enter.
Når du har indtastet formlen i den første celle, skal du trække den ned og på tværs for at udfylde de andre celler.
Forklaring
Bemærk: denne formel bruger to navngivne områder: "navne" henviser til C5: C11, og "grupper" henviser til B5: B11. Disse navne er også defineret i ovenstående skærmbillede.
Kernen i denne formel er denne: vi bruger SMALL-funktionen til at generere et række nummer svarende til et "nth match". Når vi først har række nummeret, sender vi det simpelthen til funktionen INDEX, som returnerer værdien på den række.
Tricket er, at SMALL arbejder med en matrix, der er dynamisk konstrueret af IF i denne bit:
IF(groups=$E5,ROW(names)-MIN(ROW(names))+1)
Dette uddrag tester det navngivne interval "grupper" for værdien i E5. Hvis fundet, returnerer det et række nummer fra en matrix med relative række tal oprettet med:
ROW(names)-MIN(ROW(names))+1
Det endelige resultat er en matrix, der indeholder tal, hvor der er en match, og FALSK, hvor ikke:
(1; FALSK; FALSK; FALSK; FALSK; 6; FALSK)
Denne matrix går ind i SMALL. K-værdien for SMALL (nth) kommer fra et ekspanderende interval:
COLUMNS($E$5:E5)
Når det kopieres over resultattabellen, udvides intervallet, hvilket får k (nth) til at stige. SMALL-funktionen returnerer hvert matchende række nummer, som leveres til INDEX-funktionen som række_num, med det navngivne interval "navne" som array.
Håndteringsfejl
Når COLUMNS returnerer en værdi for k, der ikke findes, kaster SMALL en #NUM-fejl. Dette sker, når alle kampe har fundet sted. For at undertrykke fejlen pakker vi formlen i IFERROR-funktionen for at fange fejl og returnere en tom streng ("").