Автоматичне заповнення однієї таблиці з іншої таблиці, якщо критерій виконаний


0

У мене дві таблиці: Інформація та Список.

Інформаційна таблиця має два стовпці: ім'я та стать.

У таблиці «Список» також є два стовпці: Чоловічий та Жіночий.

Я намагаюся автоматично заповнити таблицю "Список" іменами людей, які є чоловіками чи жінками, використовуючи формули.

Я намагався використовувати INDEX()іMATCH()

=INDEX(A:A, MATCH(D1, B:B, 0),1)

але воно повертає лише ім’я з відповідною статтю.

Будь-які ідеї?

Відповіді:


2

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

Найпростіше рішення вимагає використання формули масиву:

Скріншот робочого листа

Масив введіть ( 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)),"")}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.