Без ссылки на исходную проблему (которая, я подозреваю, давно решена), я совсем недавно обнаружил хитрый прием, который заставляет функцию выбора работать точно так же, как оператор select case
, без необходимости изменять данные. Есть только один улов: только одно из выбранных вами условий может быть верным в любой момент времени.
Синтаксис следующий:
CHOOSE(
(1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
RESULT_1, RESULT_2, ... , RESULT_N
)
При условии, что будет выполнено только одно из условий от 1 до N, все остальное равно 0, что означает, что числовое значение будет соответствовать соответствующему результату.
Если вы не уверены на 100%, что все условия являются взаимоисключающими, вы можете предпочесть что-то вроде:
CHOOSE(
(1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)
Тем не менее, если в Excel есть верхний предел количества аргументов, которые может принимать функция, вы довольно быстро ее достигнете.
Честно говоря, не могу поверить, что мне потребовались годы, чтобы разобраться с этим, но я раньше этого не видел, поэтому решил оставить это здесь, чтобы помогать другим.
РЕДАКТИРОВАТЬ: В комментариях ниже @aTrusty:
Глупые числа запятых можно исключить (и в результате оператор выбора будет работать до 254 случаев) с помощью формулы следующей формы:
CHOOSE(
1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2),
OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)
Обратите внимание на второй аргумент предложения LOG
, который помещает его в базу 2 и заставляет все это работать.
Редактировать: за Ответ Дэвида , теперь есть реальное заявление о переключении, если вам повезло работать в офисе 2016. Помимо трудностей с чтением, это также означает, что вы получаете эффективность переключения, не только поведение!