@ StoneGiant прав.Есть функции, которые нельзя использовать внутри формул массива, потому что их единственная «причина существования» состоит в том, чтобы превратить массив в скалярное значение.И иногда вы на самом деле хотите, чтобы эти функции возвращали единственное значение в формуле массива, так как бы алгоритм выполнения формулы узнал, каким образом вы этого хотите.
AND()
и OR()
являются хорошими примерамиэтот.=AND(array of values)
возвращает одно значение.MIN()
является еще одним примером.Возьмите формулу массива
= SUM ((A1: A10 = "Боб") * (Мин. (B1: B10))
MIN()
, предполагается, что она принимает набор значений и возвращаетсамое низкое. Как запрограммировать MIN()
для возврата массива? Где вы решаете, что является самым низким в каком контексте? Вы не можете. Вот почему это не работает в формулах массива.
Взять SMALL()
Затем он может вернуть формулу массива, поскольку предполагается, что он должен возвращать не только самое низкое значение, но и самое низкое n-е значение. Благодаря этому n-му аргументу теперь можно возвращать массив
=SMALL(A1:A10,{2,3})
* 1020.* Это вернет массив с двумя элементами. MS мог бы запрограммировать маленький, чтобы он не работал как формула массива, но в целом я обнаружил, что они включали функциональность массива везде, где это было практично.
Я сказал AND()
и OR()
являются хорошими примерами. MS могла бы запрограммировать их на возвращение массива, подобного комментарию @ StoneGiant. Для меня это было бы странным дизайнерским решением, но они могли бы это сделать. Но у них уже есть AND иИЛИ в массиве формулакак.Умножьте на И и добавьте к ИЛИ.
=MAX((B2:B5="Debit)*(C2:C5="Not Paid")*(ROW(B2:B5))
Это вернет номер строки последней строки, которая является дебетовой и не оплаченной.(Вы, например, задали проблему первым, но MIN вводит проблемы, которые усложняют этот пример).Умножения между равенствами такие же, как и AND.Если вы хотели, чтобы в последней строке был дебет, а в столбце C указано «Не оплачено» или «Не уверен», вы можете сделать это с добавлением.
=MAX((B2:B5="Debit)*((C2:C5="Not Paid")+(C2:C5="Not Sure"))*(ROW(B2:B5))
Знак плюс - это ИЛИ между этими двумя наборами скобок.И результаты этого ИЛИ включаются в другие скобки в виде И (умноженного).
Вы можете поместить их в ИНДЕКС
=INDEX(A2:A5, MAX((B2:B5="Debit)*(C2:C5="Not Paid")*(ROW(B2:B5)))
Итак, чтобы ответить на ваш вопрос, я думаю:Обычно функции, целью которых является преобразование набора значений в одно значение, не работают внутри формул массива.AND()
и OR()
являются чем-то особенным, потому что сложение и вычитание уже делают это внутри формул массива.
Подробнее о массивах см. Здесь http://dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/