MS Excel: как я могу сделать Max () более эффективным? - PullRequest
1 голос
/ 01 сентября 2011

У меня есть набор данных, который выглядит следующим образом:

ID  Value   MaxByID  
0   32  80  
0   80  80  
0   4   80  
0   68  80  
0   6   80  
1   32  68  
1   54  68  
1   56  68  
1   68  68  
1   44  68  
2   54  92  
2   52  92  
2   92  92  
4   68  68  
4   52  68  
5   74  74  
5   22  74  
6   52  94  
6   52  94  
6   46  94  
6   94  94  
6   56  94  
6   14  94    

Я использую {=MAX(IF(A$2:A$100=A2,B$2:B$100))} для вычисления столбца MaxByID.Тем не менее, набор данных имеет> 100 тыс. Строк, в основном с уникальными идентификаторами: это кажется действительно неэффективным способом сделать это, поскольку каждая ячейка в C: C должна выполнять итерацию по каждой ячейке в A: A.

Поле идентификатора числовое и может быть отсортировано - есть ли способ более разумно найти MaxByID?

Ответы [ 3 ]

4 голосов
/ 01 сентября 2011

Вы можете использовать сводную таблицу, чтобы найти максимум для каждого уникального ID: см., Например, эту ссылку .

Как только вы получите эту таблицу, VLOOKUP должен позволить вам быстро найти MaxByID для каждого ID.

0 голосов
/ 01 сентября 2011

Это может быть быстрее

{=IF(A2=A1,C1,MAX(($A$2:$A$24=A2)*($B$2:$B$24)))}

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

0 голосов
/ 01 сентября 2011

После сортировки по идентификатору вы можете добавить столбцы, чтобы получить начальный номер строки и подсчитать для каждого уникального.Эти 2 числа позволяют рассчитать размер и положение диапазона уникальных значений.Тогда вы можете использовать MAX (OFFSET (StartValueCell, StartThisUnique-1,0, CountThisUnique, 1)), чтобы получить максимум

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...