Оскільки відповідні дані пропускають рядки, ви не можете використовувати просту формулу індексу / відповідності для вилучення імен (без використання допоміжних стовпців, тобто).
Найпростіше рішення вимагає використання формули масиву:

Масив введіть ( Ctrl+ Shift+ Enter) наступну формулу в D2і скопіюйте, вставте / заповніть / заповніть в інші стовпці таблиці Dта E(не забудьте видалити {і }):
{=IFERROR(INDEX($A:$A,SMALL(IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE),ROW()-1)),"")}
Формула працює шляхом первісного побудови масиву , який містить індекс рядка , якщо підлога збігається, або FALSEінакше: IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE).
Тоді SMALL()функція використовується , щоб витягти наступний найменший індекс , відповідний рядку даних таблиці списку: SMALL({…},ROW()-1). Причина цього працює в тому, що SMALL()функція ігнорує булеві значення.
Зауважте, що якщо ви вводите формулу в будь-який рядок, крім рядка 2, або якщо після введення рядки формули вставляються / видаляються над першим рядком даних таблиці списку, ROW()-1частину потрібно відкоригувати так, щоб результат був 1 для першого рядка даних .
Нарешті, цей показник використовується для вилучення відповідного імені: .INDEX($A:$A,<next smallest index>)
Це IFERROR()просто там, щоб приховати #NUM!помилки, які виникають, коли SMALL()функції не вистачає дійсних індексів для повернення.
Більш надійна, але більш складна версія формули, яка автоматично коригує кількість рядків даних у таблиці інформації і не порушується, якщо рядки вставляються / видаляються над першим рядком даних таблиці списку:
{=IFERROR(INDEX($A:$A,SMALL(IF($B$1:INDEX($B:$B,COUNTA($B:$B))=D$1,ROW($B$1:INDEX($B:$B,COUNTA($B:$B))),FALSE),ROW()-ROW($B$2)+1)),"")}