Сделать формулу для списка имен строк независимым от всего столбца и первой строки - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующая электронная таблица Excel:

     A            B     C        D      E            F            G        H
1                 Q1     Q2      Q3     Q4   Search criteria:     60     Asset 2
2   Asset 1       15     85      90     70                               Asset 3
3   Asset 2       40     80      45     60                               Asset 3
4   Asset 3       30     60      55     60                               Asset 5                       
5   Asset 4       12     72      25     15
6   Asset 5       60     48      27     98
7 

В Cells A1:E6 У меня есть другие активы с их производительностью по сравнению с кварталом I-Q4.
В Column H Я перечисляю все активы, которые соответствуют критериям поиска, в Cell G1.В этом случае критерий поиска - 60, который можно найти в Cells A1:E6 для Assets 2, 3 и 5.

. Для создания списка я использую формулу из здесь :

=INDEX(A:A,SMALL(IF($B$2:$E$6=$G$1,ROW($B$2:$E$6)),ROW(1:1)))

Пока все это прекрасно работает.


Теперь, когда я перемещаю Cells A1:E6 в листе, например, в D9:H14 массивформула продолжает работать, только если она все еще ссылается на A:A и ROW(1:1), что может быть проблемой, если пользователь решит удалить ROW(1:1).Поэтому я попытался изменить формулу на:

=INDEX($D$9:$D$14,SMALL(IF($E$10:$H$14=$J$10,ROW($E$10:$H$14)),ROW($D$9:$H$9)))

Однако с этой модификацией я получаю #NUM! ошибку.

Есть ли у вас какие-либо идеи, можно ли сделать формулу массива независимой от A:A и ROW(1:1), чтобы она относилась только к Cells A1:E6 и автоматически перемещалась при перемещении этих ячеек?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Если вы используете Excel 2013 или более поздней версии, вы можете использовать следующую формулу.

=IFERROR(INDEX($D$10:$D$14,AGGREGATE(15,6,ROW($1:$5)/($E$10:$H$14=$J$10),ROW(1:1))),"")

enter image description here

0 голосов
/ 26 сентября 2018

Вы можете ограничить A:A до A1:A6, чтобы он корректировался по мере необходимости при его перемещении.Таким образом, ваша формула должна быть теперь

=INDEX(A1:A6,SMALL(IF($B$2:$E$6=$G$1,ROW($B$2:$E$6)),ROW(1:1)))

Что касается ROW(1:1), ваша верхняя формула всегда должна быть ROW(1:1), а когда вы перетаскиваете ее вниз, следующая формула должна иметь ROW(2:2).Когда вы перемещаете свою верхнюю формулу куда-то еще, и ROW(1:1) меняется на что-то вроде ROW(9:9) или что-то еще, измените ее на ROW(1:1).

Обратите внимание, что «перемещение» вашей формулы отличается от «перетаскивания»вниз '.

РЕДАКТИРОВАТЬ:

Таким образом, после того, как вы переместили ваш набор данных, верхняя формула теперь должна быть:

=INDEX($D$9:$D$14,SMALL(IF($E$10:$H$14=$J$10,ROW($E$10:$H$14)),ROW(1:1)))

Это предполагаетэта ячейка G1 (критерии) также перемещается в J10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...