Это хороший головоломка, поэтому я попробовал:
- Сначала нам нужно разбить строки и столбцы, нам нужно знать, сколько столбцов вы используете в первую очередь, и получить их столбцы.число.Я решил пойти с
=AGGREGATE
, и он хотел бы:
=AGGREGATE(15,3,(($A$2:$C$5<>"")/($A$2:$C$5<>""))*COLUMN($A$2:$C$5),ROWS($A$2:A2))
- Допустим, мы поместили эти числа в столбец
L
на данный момент.Во-вторых, нам нужно знать номер строки для каждого элемента, используя функцию `= COUNTIFS ().Формула будет выглядеть следующим образом:
=COUNTIFS(INDIRECT("L2:L"&ROW()),L2)+1
Наш результат пока выглядит следующим образом: скриншот ниже:
- Наш третий шаг теперь состоит в том, чтобы получить адреса наших индексов строк и столбцов, используя
=ADDRESS(K2,L2,4,1)
- Нам понадобится это внаш четвертый шаг, чтобы вернуть значение, используя
=INDIRECT()
, например, так:
=INDIRECT(ADDRESS(K2,L2,4,1)
- Последний шаг вернул наше имя, но нам также нужно значение месяца.Мы можем получить это, используя комбинацию
=INDEX()
и нашего индексного номера столбца в следующей формуле:
=INDEX($A$1:$C$5;1;L2)
- Теперь мы объединяем все, чтобы получитьрезультаты в столбцах
E:F
(это может показаться сложным), но
Cel E2
: =INDEX($A$1:$C$5,1;AGGREGATE(15,3,(($A$2:$C$5<>"")/($A$2:$C$5<>""))*COLUMN($A$2:$C$5),ROWS($A$2:A2)))
Cel F2
: =INDIRECT(ADDRESS(COUNTIFS(INDIRECT("E2:E"&ROW()),E2)+1,AGGREGATE(15,3,(($A$2:$C$5<>"")/($A$2:$C$5<>""))*COLUMN($A$2:$C$5),ROWS($A$2:A2)),4,1))
- Это хорошо, но что, если в одном из ваших столбцов есть пустые ячейки в конце?Ну, это даст ошибку для этой ячейки в конце вашего списка.Мы можем справиться с этим двумя способами;простая
=IFERROR()
функция для обнаружения ошибки.Но более эффективным было бы предотвратить вычисление таких длинных функций через просмотр, если нам даже нужно сделать вычисление.Мы можем использовать небольшую хитрость, чтобы посмотреть, сколько строк используется по сравнению с количеством значений.Если меньше или равно, нам нужно сделать расчет.Формула будет выглядеть так:
=IF(ROWS($D$2:D2)<=COUNTA($A$2:$C$5),...Do our calculation.....,"")
Позволяет включить в нашу окончательную формулу:
E2
: =IF(ROWS($D$2:D2)<=COUNTA($A$2:$C$5),INDEX($A$1:$C$5,1;AGGREGATE(15,3,(($A$2:$C$5<>"")/($A$2:$C$5<>""))*COLUMN($A$2:$C$5),ROWS($A$2:A2))),"")
F2
: =IF(ROWS($D$2:D2)<=COUNTA($A$2:$C$5),INDIRECT(ADDRESS(COUNTIFS(INDIRECT("E2:E"&ROW()),E2)+1,AGGREGATE(15,3,(($A$2:$C$5<>"")/($A$2:$C$5<>""))*COLUMN($A$2:$C$5),ROWS($A$2:A2)),4,1)),"")
- Перетащите формулы вниз, и наш конечный результат будет выглядеть так: