Excel - заполнение ячеек на основе динамического условия - PullRequest
0 голосов
/ 13 июня 2019

У меня есть все дни в году, перечисленные в столбце A (в американском формате, извините!).Некоторые из тех дней являются «особыми», основанными на некоторых других критериях где-то еще в электронной таблице.Я хочу заполнить другой столбец (D в приведенном ниже примере) только с датами в столбце A, удовлетворяющих определенным критериям (столбец C имеет значение True).Желаемый (динамический) вывод в столбце D:

    A              B             C             D
1  Date        Day           SpecialDay     JustSpecials
2  1/1/2019    Tuesday       True           1/1/2019
3  1/2/2019    Wednesday     False          1/4/2019
4  1/3/2019    Thursday      False          1/5/2019
5  1/4/2019    Friday        True           1/6/2019
6  1/5/2019    Saturday      True           1/8/2019
7  1/6/2019    Sunday        True           1/9/2019
8  1/7/2019    Monday        False
9  1/8/2019    Tuesday       True
10 1/9/2019    Wednesday     True

Итак, если день по какой-то причине становится особенным (False становится True в столбце C), то я хочу, чтобы эта дата автоматически добавлялась в столбец D.Я пытаюсь уклониться от использования функциональности Excel «более высокого уровня» здесь, так как мне придется когда-нибудь передать эту систему кому-то другому, поэтому желательно не использовать VBA, если это возможно.

Спасибо за любую помощь, вы можетепредоставить.

1 Ответ

1 голос
/ 13 июня 2019

Вы можете попробовать использовать SMALL() в формуле массива следующим образом:

Формула в D2:

=IFERROR(INDEX($A$1:$A$10,SMALL(($C$2:$C$10=TRUE)*ROW($C$2:$C$10),COUNTIF($C$2:$C$10,FALSE)+(ROW()-1))),"")

Введите через Ctrl Shift Введите

enter image description here

Обратите внимание, что если ваши значения действительно логические, просто замените текстовые строки в сравнении для логических значений.

Другой вариант для D2 может быть:

=IFERROR(INDEX($A$2:$A$10,MATCH(0,IF($C$2:$C$10=TRUE,COUNTIF($D$1:D1,$A$2:$A$10),""),0)),"")

Также вводится как массив.

И еще один вариант, может быть, даже более удобный для пользователя, это сводная таблица вашего диапазона и фильтра Дата в SpecialDay ...

EDIT

После просмотра вашего видео:

  • Ваш первый вариант показывает Date, потому что вы искали текстовые строки вместо логических. Измените текстовые строки True и False на фактически записанные логические значения TRUE и FALSE.
  • Оставьте ссылку A1, это правильно. Вторая часть формулы возвращает истинное число. Поскольку вы используете INDEX(), он начнет считать строки из первой строки этого диапазона. Так что ссылка $A$1:$A$10 в моей первой формуле верна.
  • Следующее, что вы попробовали, - это использование значения 1 для истинных значений. Это не сработает. Формула будет пытаться найти на самом деле значения 1, которых нет. Для этого формула вернет массив нулей. В результате чего фактического значения не будет, формула индекса вернет ячейку A1.

Итак, пробники для видео и усилий! Решение для вас - узнать, как записать реальные логические значения TRUE и FALSE, они не поставляются с двойными кавычками. Я обновлю обе формулы, так как вы все равно не используете текстовые строки.

...