Проблемы с использованием функций массива в Excel для создания сводной таблицы

У меня есть таблица со списком имен учителей в столбце, а столбцы, следующие за ней, — это отдельные учебные курсы. Идея состоит в том, что для каждого курса у нас будет один ведущий репетитор и три других репетитора, и эти метки присваиваются именам выбранных учителей. Итак, это выглядит примерно так:

Teacher training1 training2 training3
john Lead tutor
bob Tutor Tutor Tutor
jane Tutor Tutor
alice Tutor Lead tutor
tim Tutor Tutor Tutor
gus Lead tutor

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

Lead tutor Tutor Tutor Tutor
training1 john bob alice tim
training2 alice bob jane tim
training3 gus bob jane tim

Я знаю, что мне нужно что-то вроде index/match/small/if/column/row, но из всех примеров, которые я нашел в Интернете, я просто не могу заставить его работать...

Самое близкое, что я получил, это:

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$14,МАЛЕНЬКИЙ(ЕСЛИ(G$2=$B$2:$C$14,СТРОКА($B$2:$C$14)-1,не распределено),СТОЛБЦ($F $3:F3))),)}

Это не дает мне сообщений об ошибках, но также не дает правильных результатов...!

Я загрузил свою попытку на GoogleDrive - был бы безмерно благодарен, если бы кто-нибудь мог пролить свет на то, что я сделал неправильно (я только узнал о массивах и индексе/агрегировании/сопоставлении на YouTube, но просто не мог понять это ...!)

https://drive.google.com/file/d/1YKhKppAevNGrU_XFGe3IVNFOXynoKFiS/view?usp=sharing

заранее спасибо


person Jake Lee    schedule 28.02.2021    source источник


Ответы (2)


Я работал над единственной формулой для использования.

В G3 используйте следующее: =LET(x,INDEX(Table24,,MATCH($F3,$1:$1,0)),IFERROR(INDEX(Table24[[name]:[name]],SMALL(IF(G$2=x,ROW(x)-1,""),COUNTIF($G$2:G$2,G$2))),""))

Или, если у вас более старая версия Excel, используйте это (избегая функции LET):

=IFERROR(INDEX(Table24[[name]:[name]],SMALL(IF(G$2=INDEX(Table24,,MATCH($F3,$1:$1,0)),ROW(INDEX(Table24,,MATCH($F3,$1:$1,0)))-1,""),COUNTIF($G$2:G$2,G$2))),"")

person P.b    schedule 28.02.2021
comment
Большое вам спасибо за это, мне удалось использовать вторую формулу и настроить ее для решения моей проблемы с таблицей. Спасибо за это - это действительно сработало. Благодарю вас! - person Jake Lee; 01.03.2021

Я выбрал подход с двумя формулами. Было бы гораздо лучше иметь единую формулу и просто скопировать ее на всю таблицу, но я решил, что усилия не стоили эффекта. Поэтому у меня есть следующая формула для извлечения ведущего наставника. (183)

=INDEX(Table1[Teacher],MATCH(B$11,INDIRECT("Table1["&$A12&"]"),0))

С этой целью я преобразовал вашу первую таблицу в таблицу Excel (Table1), охватывающую диапазон A1:D7. Это точная копия вашей таблицы. Таким образом, заголовками являются Учитель, Обучение1, Обучение2 и Обучение3. Поэтому Table1[Teacher] эквивалентно A2:A7. Вы можете заменить один синтаксис на другой, но использование таблицы даст вам динамический диапазон, который вам придется создать в противном случае.

У меня есть ваша выходная таблица в диапазоне A11: E14. Поэтому у меня есть Training1, Training2 и Training3 в A12:A14. Таким образом, INDIRECT("Table1["&$A12&"]" относится к столбцам таблицы с этими именами, поскольку формула копируется вниз. Этот компонент занимает видное место в следующей формуле.

Приведенная выше формула находится в ячейке B12, а затем копируется в ячейку B13:14. Обратите внимание на его ссылку на B11, откуда он получает ведущего наставника. Измените его ссылку на A12, чтобы поймать строку, в которой у вас есть Training1, которая должна соответствовать заголовку столбца в таблице.

Вот формула для ячейки C12. Вы можете использовать его как в Office 365, но в более ранних версиях Excel это будет формула массива. Формулы массива требуют подтверждения CTL+SHIFT+ENTER. После настройки скопируйте его в C14:E14.

=INDEX(Table1[Teacher],SMALL(IF(INDIRECT("Table1["&$A12&"]")="Tutor",ROW(INDIRECT("Table1["&$A12&"]"))-ROW(INDEX(INDIRECT("Table1["&$A12&"]"),1))+1),COLUMN()-2))

В этой формуле есть неточность, которую я решил оставить вам для исправления. Как видите, он содержит слово Tutor (в отличие от Lead Tutor) для поиска в таблице. В моей тестовой таблице у меня есть слово в C11:E11 (скопировано из вашего дизайна таблицы), и я должен был взять его оттуда, как я сделал в первой формуле, которая относится к B11. Как бы то ни было, это поможет вам понять формулу, но вы можете заменить слово Tutor на C$11, если вы так настроили свою таблицу.

Имеется ссылка на столбец «Учитель» в таблице и 3 ссылки на A12, уже описанные выше. Обращаю ваше внимание на COLUMN()-2). Когда вы введете эту формулу в столбец C, она вернет 1, а скопированная вправо будет считать 2 и 3. Так определяется ранг для функции НАИМЕНЬШИЙ. Настройте его в зависимости от столбца, в который вы вставляете формулу.

Редактировать

Предполагая, что вы не хотите преобразовывать первую таблицу в таблицу, вы можете ссылаться на диапазоны по именам, которые вы назначаете (и делаете динамическими в этом процессе). Создайте 4 именованных диапазона следующим образом:

A2:A7 as "Teachers"
B2:B7 as "Training1"
C2:C7 as "Training2"
D2:D7 as "Training3"

Обратите внимание, что 3 из вновь названных диапазонов имеют имена в A12:A14. Теперь формулы для B12 и C12 будут выглядеть следующим образом.

[B12] =INDEX(Teachers,MATCH(B$11,INDIRECT($A12),0))
[C12] = INDEX(Teachers,SMALL(IF(INDEX(INDIRECT($A12),,1)="Tutor",ROW(INDEX(INDIRECT($A12),,1))-ROW(INDEX(INDIRECT($A12),1))+1),COLUMN()-2))
person Variatus    schedule 28.02.2021
comment
ОГРОМНОЕ СПАСИБО - на славу получилось! Спасибо Спасибо спасибо!!! - person Jake Lee; 28.02.2021
comment
Привет, извините - небольшой дополнительный вопрос ... в моем фактическом рабочем листе есть формула для заголовков столбцов тренировки (ссылки из другого рабочего листа, той же рабочей книги), и когда я попытался преобразовать свои данные в таблицу, мне пришлось удалить все формулы. Если это единственное решение, я заставлю его работать, но на будущее, есть ли а) альтернатива ссылкам на таблицы или б) способ иметь формулы в заголовках таблиц? (извините, я должен был включить эту информацию в исходный вопрос!) - person Jake Lee; 28.02.2021
comment
Я расширил свой ответ, чтобы одна и та же формула относилась к диапазонам, которые определены как именованные диапазоны. Кстати, если вы возьмете мой первоначальный ответ, заставите его работать с таблицей, а затем преобразуете таблицу в нормальный диапазон, Excel преобразует ссылки на таблицы в ссылки на листы. Ваша установка все равно будет работать. Вопрос лишь в том, насколько динамичными должны быть эти диапазоны. - person Variatus; 01.03.2021