У меня есть таблица, в которой я пытаюсь использовать функцию фильтра, чтобы сообщать имена на основе фамилий и уровня приоритета. В настоящее время я могу использовать функцию фильтра для просмотра определенного имени в раскрывающемся списке, но она не делает этого в зависимости от приоритета.
В настоящее время список содержит 59 значений, и я пытаюсь сократить время, необходимое для этого, и создать более простой способ поиска на основе уровней приоритета. У меня есть другие критерии, по которым он ищет (диапазоны дат, привязанные к именам). Я не могу манипулировать данными в Таблице 1 по юридическим причинам.
Прямо сейчас я использую эту формулу фильтра:
=FILTER(Table1[Names],ISNUMBER(SEARCH(I1,Table1[Names])))
Я не уверен, является ли функция фильтра лучшим инструментом или есть лучшее предложение, мое использование VBA очень ограничено.
Это формула, близкая к той, которую я пытаюсь получить, работая над набором данных:
=FILTER(Table1[Names],ISNUMBER(SEARCH(Table2[Last],Table1[Names]))*(Table2[Priority]=I1))
Итак, если бы я хотел ввести «Высокий» в I1, он бы вернулся как таковой:
Таблица1:
Таблица2:
Выход на основе высокого уровня (ячейка I1)
@rotabor, как я объяснил в принятом мной решении, он работает в тандеме с другими поисками. Это исключает необходимость искать первым и последним, поэтому в своем сообщении я указал фамилию/уровень приоритета.
=FILTER(
Table1[Names],
BYROW(
TEXTAFTER(Table1[Names]," ",-1)=TRANSPOSE(FILTER(Table2[Last],Table2[Priority]=I1,"")),
LAMBDA(row,OR(row))
)
)
В вашей формуле нет ничего плохого, но в функции SEARCH()
find_text и Within_text оба вертикальны, один или другой должен быть либо вертикальным, либо горизонтальным, еще одна причина уже была упомянута @ScottCraner Sir:
• Один из вариантов использования BYROW()
:
=FILTER(Table1[Names],
BYROW(1-ISERR(SEARCH(TOROW(FILTER(Table2[Last],I1=Table2[Priority],"")),Table1[Names])),LAMBDA(α,OR(α))))
• Или без использования вспомогательной функции LAMBDA()
:
=CHOOSEROWS(Table1[Names],
SORT(XMATCH("*"&FILTER(Table2[Last],Table2[Priority]=I1),
Table1[Names],2)))
Или,
=FILTER(Table1[Names],
IFNA(SIGN(XLOOKUP(Table1[Names],
Table2[First]&" "&Table2[Last],Table2[Priority])=I1),0))
Есть много способов сделать это, и поскольку вы специально ищете Last_Names в столбце Names, добавьте еще одну альтернативу:
=FILTER(Table1[Names],
ISNUMBER(XMATCH(TEXTAFTER(Table1[Names]," ",-1),
FILTER(Table2[Last],Table2[Priority]=I1,""))))
=FILTER(Table1[Names],1-ISNA(XMATCH(Table1[Names],FILTER(Table2[First]&" "&Table2[Last],Table2[Priority]=I1))))
Обратите внимание, что в ваших данных не используются отчества. Это хлопотно?
С аргументом транспонированного массива SEARCH
выдаст результат в нескольких столбцах. Затем их можно объединить с MMULT
. Просто даю еще один подход для возможного использования в будущем.
=LET(
last_to_match, FILTER(Table2[Last], Table2[Priority] = $I$2),
FILTER(
Table1,
MMULT(
--ISNUMBER(
SEARCH(TRANSPOSE(last_to_match), Table1[Names])
),
SEQUENCE(ROWS(last_to_match))
)
)
)
Пожалуйста, измените, например,
Keneth Howe
наKeneth Patrick
и проверьте решение, которое вы приняли.