2014-10-23 5 views
1

У меня есть массив, который я пытаюсь вернуть максимальное и минимальное время, соответствующее номеру ссылки, введенному в O12.Функция Excel Min не работает

я хочу это так, чтобы, когда я вхожу в 10 О12 моя максимальная функция дает мне 3:00 и моя мин дает мне 1:00

A-----B-----C 

10----------1:00 

10----------3:00 


{=MAX(INDEX((A6:A200=O12)*(C6:C200),0))} 
{=MIN(INDEX((A6:A200=O12)*(C6:C200),0))} 

Моя максимальная функция работает отлично и возвращает наибольшее число, но моя функция min всегда показывает ноль.

ответ

0

вы проверяете минимум что-то или 0. Поскольку то, что вы ищете, положительно, выигрывает каждый раз. Попробуйте использовать большое количество для сравнения, например.

{=MIN(INDEX((A6:A200=O12)*(C6:C200),2E99))} 
+0

Я вижу, что вы - сказал он. Пробовал это, просто дал мне REF! хоть. – user11067415

+0

Кроме того, я могу ошибаться, но я думаю, что 0 является частью функции индекса в виде строки # – user11067415

1

При использовании этого «продукта» версия, в отличие от оператора IF, все строки, для которых любой из ваших двух тестов возвращают FALSE сгенерирует результат ноль. Это происходит с тех пор, когда при получении продуктов булевых значений TRUExFALSE = 0 и FALSExTRUE = 0. Следовательно, ваш массив, переданный в MIN, будет содержать потенциально много нулей, что приведет к нежелательным результатам.

Использование инструкции IF, обязательно в формуле массива, этим же строкам присваивается логическое значение FALSE, а не ноль. И поскольку MIN игнорирует логические значения, эта настройка гарантирует правильные результаты.

В качестве иллюстрации, и только учитывая диапазон A6: C10, давайте предположим, что мы имеем следующие значения:

О12: "X"

A6: (пусто) A7: (пусто) A8: "X" A9: (пусто) A10: "X"

С6: С7: С8: С9: С10:

формула не-массив:

=MIN(INDEX((A6:A10=O12)*(C6:C10),0)) 

будет определяться как:

=MIN(INDEX(({"";"";"X";"";"X"}=O12)*(C6:C10),0)) 

который:

=MIN(INDEX(({FALSE;FALSE;TRUE;FALSE;TRUE})*(C6:C10),0)) 

т.е .:

=MIN(INDEX({0;0;99;0;65},0)) 

(Так как значения в С6, С7 и С9 которые умножается на FALSE их конечного продукта равен 0.)

т.е.:

=MIN({0;0;99;0;65}) 

, который, по-видимому 0.

Однако, эквивалентная формула массива:

=MIN(IF(A6:A10=O12,C6:C10)) 

решает, как:

=MIN(IF({"";"";"X";"";"X"}=O12,C6:C10)) 

который является:

=MIN(IF({FALSE;FALSE;TRUE;FALSE;TRUE},C6:C10)) 

т.е .:

=MIN(IF({FALSE;FALSE;TRUE;FALSE;TRUE},{74;64;99;58;65})) 

т.е .:

=MIN({FALSE;FALSE;99;FALSE;65}) 

который на этот раз составляет 65, как хотелось бы.

Если вы действительно не хотите использовать формулу массива (хотя я не могу понять, почему это так) - требуется комбинация клавиш в сторону, многие люди, похоже, не понимают, что это обходное решение, которое использует вставку Ан (дополнительная) функция INDEX не более эффективна, чем массив настройка), то, если у вас есть Excel 2010 или более поздняя версия, вы можете использовать агрегатный, то есть:

=AGGREGATE(15,6,C6:C10/(A6:A10=O12),1) 

с уважением

+0

Отличный ответ! Он отлично работает как формула массива так же, как вы говорите, но я не понимаю, почему я не могу использовать то же обходное решение, что и JNevill, с индексной функцией = MIN (INDEX (IF (A6: A10 = O12, C6: C10) , 0)) –

+0

Так оно и есть. Используемый таким образом и без ввода массива, INDEX сам по себе не может принудить оператор IF работать по всем элементам в массиве, переданным ему. Могу ли я спросить, почему вы так настаиваете на том, чтобы избежать CSE? –

+0

Лично я в порядке с ними. Вы можете утверждать, что если использование индекса дало последовательный способ получить эффект формулы массива, которую некоторые люди предпочли бы использовать, но это явно не так. –