Сравнение индекса по горизонтали: найти текст в матрице и вернуть заголовок - PullRequest
0 голосов
/ 17 января 2019

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

enter image description here

Это мой рабочий код для вертикальной матрицы:

=IFERROR(INDEX(auditors,MATCH(1,MMULT(--(names=A106),TRANSPOSE(COLUMN(names)^0)),0)),"")

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Использование этого в качестве формулы массива, кажется, хорошо помогает:

{=INDEX(Auditors;1;SUM(IF(Names=Auditors;COLUMN(Auditors);0)))}

Это работает путем создания матрицы того же размера вашей таблицы, где ячейки содержат либо 0, либо столбец ячейки, если есть совпадение. Обратите внимание, что предполагается, что ваш определенный аудитором диапазон начинается с столбца 1 и включает заголовки и данные (я использовал $ A $ 1: $ C $ 4)

Кроме того, по умолчанию возвращается Auditor 1, если совпадений нет; чтобы вызвать ошибку, вы можете использовать тот факт, что результат SUM будет нулевым, например так:

{=INDEX(Auditors;1;1/(1/SUM(IF(Names=Auditors;COLUMN(Auditors);0))))}

Кроме того, поскольку он просматривает всю таблицу Auditors, он также будет сопоставлять самих аудиторов; если это не то, что вам нужно, вы можете определить отдельные диапазоны для заголовка и данных ваших аудиторских таблиц или соответственно СМЕЩИТЬ их.

0 голосов
/ 17 января 2019

Иногда есть причины не хотеть формулу массива. Вот пример использования обычного старого SUMPRODUCT.

=INDEX(header_row,SUMPRODUCT((names=specific_name)*(COLUMN(header_row)-COLUMN(header_row_first_cell)+1)))

Все ячейки / диапазоны должны быть фиксированными, за исключением конкретного имени.

  • header_row имеет размер 1 на 3 от аудитора 1 до аудитора 3
  • names - это диапазон имен 3 на 3 в матрице
  • конкретное_имя - это отдельная ячейка с именем, которое вы находите
  • header_row_first_cell - это первая ячейка в header_row, поэтому Auditor 1

Кроме того, вместо бессмыслицы COLUMN(header_row)-COLUMN(header_row_first_cell)+1 я обычно люблю индексировать свои строки и столбцы. Поэтому над заголовком я буду нумеровать столбцы с 1 по 3 и просто использовать этот диапазон.

=INDEX(header_row,SUMPRODUCT((names=specific_name)*(column_index)))
0 голосов
/ 17 января 2019

Использование:

=IFERROR(INDEX(auditors,AGGREGATE(15,7,(COLUMN(names)-MIN(COLUMN(names))+1)/(names=H2),1)),"")

Предполагается, что ваш первый заголовок находится в A1.Поместите эту формулу в A2 и копируйте вверх и вниз.

enter image description here

...