2014-11-25 4 views
2

Друзья, я надеюсь, вы сможете помочь. Я довольно уверен, что некоторое время назад я нашел решение этой проблемы, но глупо меня это не записывало, и теперь я не могу вспомнить, как я это сделал. Я рисую пробел о том, что искать (Google залита ответами на «динамические диапазоны имен», для чего я не стремлюсь). Итак, вопрос:Ссылка на перемещение/массив в таблице Excel

Как определить диапазон внутри формулы (скажем, RANK, например), который перемещается по мере продвижения по таблице? Я стараюсь избегать использования INDIRECT, потому что он становится немного болотом памяти/процессора, когда повторяется в большой таблице. Довольно уверен, что есть другой способ, возможно, с помощью INDEX или MATCH?

Упрощенная версия данных будет выглядеть следующим образом: Столбец A содержит множество ссылочных номеров, каждый из которых повторяется несколько раз. Колонка B имеет кучу временных меток Колонка C, где я хотел бы ранжировать метку времени в столбце В, по сравнению со всеми другими временными метками, которые разделяют один и тот же ссылочный номер в столбце A.

результирующий набор должен выглядеть это:

| A |  B   | C | 
| abc123 | 01/01/2014 12:30 | 1 | 
| abc123 | 01/02/2014 12:30 | 2 | 
| abc123 | 01/02/2014 13:30 | 3 | 
| abc123 | 01/03/2014 09:30 | 4 | 
| def456 | 01/01/2014 12:30 | 1 | 
| def456 | 01/01/2014 12:45 | 2 | 
| xyz987 | 01/02/2014 12:30 | 1 | 
| xyz987 | 01/02/2014 16:30 | 2 | 
| xyz987 | 01/03/2014 11:30 | 3 | 

Любые идеи о том, что будет самым дешевым решением для процессора в этом случае?

+0

- это временные марки всегда в хронологическом порядке? старшие идут первым, а затем более новые, не так ли? – AHC

+1

На данный момент, да. Таблица заполняется с использованием SQL-запроса, поэтому я заказал их по значениям в столбце A, а затем значения в столбце B, опускающемся на сервере, до того, как они попадут в Excel. Я не ожидаю необходимости заказать их любым другим способом, так что это безопасное предположение. – CactusCake

+2

Я знаю, что это помечено как вопрос Excel, но, возможно, стоит посмотреть http://stackoverflow.com/questions/5463384/sequential-number-rows-by-keyed-group-in-sql для решения SQL –

ответ

1

Так вот трюк:

скопировать и вставить в C1 и перетащить и заполнить вниз до конца.

=IF(A2=A1;SUMPRODUCT(--(A$1:A$9=A1);--(B1>B$1:B$9))+1;SUMPRODUCT(--(A$1:A$9=A1);--(B1>B$1:B$9))+1) 



это формула массива, поэтому нажмите Ctrl + сдвиг + ввести вычислить формулу
Вот пример листа in this file downloadable from this link

PS не забудьте отрегулировать формулу на региональные настройкизаменяя ";" с ",". Повеселись.

+0

Я думаю, что ответ очень опрятный, и я понимаю, что он работает, даже если даты не в порядке, но я не совсем с этим. Я не понимаю, почему SUMPRODUCT повторяется в инструкции IF и почему вы не можете просто сказать = SUMPRODUCT (- (A $ 1: A $ 9 = A1), - (B1> B $ 1: B $ 9)) + 1, а также потому, что вы используете SUMPRODUCT, почему он должен быть формулой массива. Могут ли связи быть проблемой? Думаю, не должно быть никаких. –

+0

на самом деле второй sumproduct существует, потому что нам нужен последний элемент в списке, без него вы получаете 1, 2, 3, а для четвертого вы получаете либо ничего, либо 0. Это соответствует значению **, если ошибка ** формулы **, если формула **. Поэтому нам нужно, чтобы он вытащил последний элемент, который равен 4 (в первом наборе ваших данных). Что касается ** - **, то они не должны быть там, вы не можете их удалить. Если мой ответ - тот, который вам нужен, то, пожалуйста, примите его как * ответ * на вопрос. – AHC

+0

Короче (не CSE) версия, похоже, работает для меня, но, без каких-либо тестов скорости, я задаюсь вопросом, могут ли два СУБЪЕКТОВ внутри массива квалифицироваться как «наименее налоговое решение для процессора»? Однако полезно иметь в качестве опции. – pnuts

Смежные вопросы