Формула Excel: индексирование и сопоставление по нескольким столбцам -

Общая формула

(=INDEX(rng1,MATCH(1,MMULT(--(rng2=critera),TRANSPOSE(COLUMN(rng2)^0)),0)))

Резюме

Чтобы найти значение путем сопоставления в нескольких столбцах, вы можете использовать формулу массива, основанную на MMULT, TRANSPOSE, COLUMN и INDEX. В показанном примере формула H4 имеет следующий вид:

(=INDEX(groups,MATCH(1,MMULT(--(names=G4),TRANSPOSE(COLUMN(names)^0)),0)))

где «имена» - именованный диапазон C4: E7, а «группы» - именованный диапазон B4: B7. Формула возвращает группу, к которой принадлежит каждое имя.

Примечание. Это формула массива, которую необходимо вводить с помощью клавиши Control Shift.

Объяснение

В этой формуле используются следующие логические критерии, действующие изнутри:

--(names=G4)

где names - именованный диапазон C4: E7. Это генерирует результат ИСТИНА / ЛОЖЬ для каждого значения в данных, а двойной отрицательный результат приводит значения ИСТИНА / ЛОЖЬ к 1 и 0, чтобы получить такой массив:

(0,0,0;1,0,0;0,0,0;0,0,0)

Этот массив состоит из 4 строк по 3 столбца, что соответствует структуре «имен».

Второй массив создается с этим выражением:

TRANSPOSE(COLUMN(names)^0))

Функция COLUMN используется для создания числового массива с 3 столбцами и 1 строкой, а TRANSPOSE преобразует этот массив в 1 столбец и 3 строки. Возведение в степень нуля просто преобразует все числа в массиве в 1. Затем функция MMULT используется для умножения матриц:

MMULT((0,0,0;1,0,0;0,0,0;0,0,0),(1;1;1))

и результат передается в функцию ПОИСКПОЗ в виде массива с 1 в качестве значения поиска:

MATCH(1,(0;1;0;0),0)

Функция ПОИСКПОЗ возвращает позицию первого совпадения, которое соответствует строке первой совпадающей строки, соответствующей заданным критериям. Он вводится в ИНДЕКС как номер строки, а именованный диапазон «группы» - как массив:

=INDEX(groups,2)

Наконец, ИНДЕКС возвращает «Медведь», группу, к которой принадлежит Адам.

Литерал содержит критерии

Чтобы проверить конкретные текстовые значения вместо точного совпадения, вы можете использовать функции ЕЧИСЛО и ПОИСК вместе. Например, чтобы сопоставить ячейки, содержащие слово «яблоко», вы можете использовать:

=ISNUMBER(SEARCH("apple",data))

Эта формула объясняется здесь.

Хорошие ссылки

Ответ Stackoverflow от XOR LX

Интересные статьи...