2015-07-06 2 views
0

Я работаю с данными временных рядов в Excel, чтобы сообщить некоторые вычисления нашим программистам. Я застрял, пытаясь вернуть индексное значение последнего максимального значения в массиве. Я используя функцию матча(), как в ячейке D12:Return last index value from match()

= ПОИСКПОЗ (С12, В2: B12,0)

Это возвращает значение 1, поскольку 126.47 дублируется в местах расположения 1 и 7 в массиве. То, что я действительно хочу вернуть, - 7, местоположение последнего максимального значения. Я просмотрел функции index() и lookup(), но безуспешно. Спасибо за помощь!

enter image description here

Edit 1: Для того, чтобы уточнить, функция Match делает 90% того, что я хочу сделать, за исключением этих дублей. Вот больше данных, чтобы выделить мою единственную ошибку с дубликатами: enter image description here

ответ

1

Что вы на самом деле ищете, является функцией псевдо-MAXIF.

=MAX(INDEX(ROW($1:$11)*($B$2:$B$12=$C$12), ,)) 

Это возвращает номер строки (как положение в пределах диапазона, как MATCH function бы). Чтобы получить дату из столбцов А это было бы,

=INDEX($A$2:$A$12, MAX(INDEX(ROW($1:$11)*($B$2:$B$12=$C$12), ,))) 

Промежуточные значения (если бы было больше, чем два), могут быть получены с помощью SMALL function или LARGE function вместо MAX function.

При переписывании в ваших собственных целях помните, что ROW(1:11) - это позиция в пределах B2: B12, а не фактическая строка на листе. Возвращаемое число аналогично числу, возвращаемому аналогичной функцией MATCH.

EDIT - Поплавок последних 11 значений:

захватить последние 11 значений, абсолютные ссылки строк должны быть удалены из колонны B и ссылки диапазона ячеек C.

=MAX(INDEX(ROW($1:$11)*(B2:B12=C12), ,)) 

Float last 11 values

+0

Использование ROW здесь не столь строгое. Например, что, если ОП решает по какой-либо причине переместить свои данные из B2: B12, например. B4: B14? Ваша первая формула не даст правильных результатов. Обязательно ли ОП узнает, что часть ROW нуждается в исправлении? Еще лучше, можете ли вы внести изменения в свою конструкцию, чтобы она всегда возвращала правильные ответы, даже если измененный диапазон изменен? –

+0

спасибо @XORLX, я должен был уточнить, что я только предоставил фрагмент моих данных. мне действительно нужно катить функцию вниз на все временные ряды. – jonnie

+0

@ user1499626 Это было не то, что я имел в виду. Возможно, вы можете добавить что-то свое исходное сообщение, которое проясняет этот комментарий? Возможно, один или два ожидаемых результата? –

1

Как насчет:

=MAX(IF(C12=$B$2:INDEX(B:B,COUNTA(B:B)),ROW($B$2:INDEX(B:B,COUNTA(B:B)))))-1 

Вам нужно ввести массив это с помощью Ctrl + Shift + Enter.

+0

Я думаю, вы обнаружите, что вы смещены на одну строку (возвращая действительную строку от B2: B12, а не от 1:11. – Jeeped

+0

Правильно, спасибо! Сделано изменение. – rwilson