Чтобы получить список с формулой использовать эту формулу массива в C2:
=IFERROR(INDEX($A$2:$A$6,MATCH(1,NOT(ISERROR($B$2:$B$6))*(COUNTIF($C$1:$C1,$A$2:$A$6)=0),0)),"")
Будучи формула массива должна быть подтверждена с Ctrl-Shift-Enter, при выходе из режима редактирования. Если все сделано правильно, Excel поместит {}
вокруг формулы.
Другой метод, который не требует в заголовке строки или специальную запись CSE:
=IFERROR(INDEX($A$1:$A$5,AGGREGATE(15,6,ROW($B$1:$B$5)/(NOT(ISERROR($B$1:$B$5))),ROW(1:1))),"")
В обеих формулах, если тест для строки NA
а не погрешность #N/A
, а затем заменить NOT(ISERROR($B$2:$B$6)
на ($B$2:$B$6 <> "NA")
Оба эти типа формулы массива, и если набор данных и список возврата являются большими, это замедлит расчеты Excel. Метод фильтрации, копирования, удаления фильтров, пасты будет быстрее на больших наборах данных.
Я очень много спросил [здесь] (http://stackoverflow.com/questions/39253086/ms-excel-populate-cell-with-a-percentage-based-on-number-of-cells-coloured/ 39254416 # comment65856152_39254416) меньше, чем 1 день назад: Я предполагаю, что и ваши формулы работают, и OP * отмечен [excel-formula], но мне интересно, с той же конечной целью, является формульным подходом, который вы бы сами * выберете *? – pnuts
@pnuts, как я заявил в последнем абзаце, это будет зависеть от того, как часто изменяются данные и насколько велики данные. Если небольшой набор данных, который часто менялся, то да, вот как я это сделаю. Если бы это был один, я бы сделал это по-твоему. Если он часто менялся и набор данных был большим, я бы написал vba, чтобы сделать это, скорее всего, подражая вашим советам. –