Вы можете попробовать следующий подход, вставив приведенную ниже формулу в ячейку E5
:
=IFERROR(INDEX(RAW!$D$2:$D$279,SMALL(IF(RAW!$B$2:$B$279=$C$5,ROW(RAW!$D$2:$D$279)-1,10^10),ROWS($A$1:A1))),"")
Это формула массива, поэтому ее необходимо зафиксировать с помощью CTRL + SHIFT + ENTER и затем скопируйте его столько, сколько нужно.
Объяснение:
INDEX
is извлекает ссылку на диапазон из определенной GRID на основе ссылки на строку и столбец.
В этом конкретном случае мы намереваемся извлечь ссылки последовательно. Это выполняется с помощью SMALL(IF(RAW!$B$2:$B$279=$C$5,ROW(RAW!$D$2:$D$279)-1,10^10),ROWS($A$1:A1))
. В этой формуле первой частью является формула IF строения ARRAY, как показано ниже
IF(RAW!$B$2:$B$279=$C$5,ROW(RAW!$D$2:$D$279)-1,10^10)
, которая проверяет ячейки в столбце B, если они соответствуют значению критерия. Если значение совпадает, то возвращается ссылка ROW, а если нет, то возвращается очень большое значение, т.е. 10 ^ 10. Мы вычитаем 1 из ссылки на строку, поскольку данные начинаются со строки 2, поэтому в принципе это должно быть (n-1). Это расположение создает ARRAY, например {1;2;3;4;5;6;7;10000000000....}
для значения "Acorda".
Но нам нужно передавать по одному элементу за раз в формулу INDEX, так что это делается с помощью SMALL(IfBasedArray,k)
, где k part генерируется последовательно ROWS($A$1:A1)
, который начинается с 1 и увеличивается вниз по мере копирования формулы, что, таким образом, позволяет INDEX возвращать желаемые результаты.
Наконец, когда совпадения заканчиваются, подается большое число, т.е. 10000000000, и генерируется ошибка, которая затем равна по формуле IFERROR для возврата пустым!