1

Я объединяю несколько источников данных, в которых имена сотрудников по-разному («Фамилия, имя», «Фамилия и имя») и т.д.) Объединены в одну рабочую книгу и, следовательно, в одну таблицу. Я хочу не тратить много времени на манипулирование импортированными данными.

Я хочу использовать формулу, которая скажет мне, если чье-то имя находится в строке (A), независимо от того, как имя отображается. Ниже приведена формула, которую я использовал, однако она не гарантирует совпадения имени и фамилии в одной ячейке / строке. (Желтое выделение указывает на примеры, которые являются неправильными.)

У кого-нибудь есть какие-либо предложения или идеи?

Формула:

=IFERROR(IF(MATCH("*"&C3&"*",$A$2:$A$6,0)>=0,IF(MATCH("*"&D3&"*",$A$2:$A$6,0)>=0,1,0)),0)

4 ответа4

2

Ищите оба имени одновременно. Вам нужно будет выполнить два поиска, один с первым именем впереди, а другой с фамилией впереди:

=IF(OR(ISNUMBER(MATCH("*" & C3 & "*" & D3 & "*",A:A,0)),ISNUMBER(MATCH("*" & D3 & "*" & C3 & "*",A:A,0))),1,0)

ISNUMBER возвращает TRUE, когда совпадение найдено. Если совпадение не найдено, MATCH выдаст ошибку (не число).

2
=SUMPRODUCT(ISNUMBER(SEARCH(C3,Certified))*ISNUMBER(SEARCH(D3,Certified)))

Где Certified ваш список в колонке А.

Если чувствительность к регистру помогает ( что означает меньшее количество ложных срабатываний без увеличения ложных негативов), как это было бы для некоторых примеров указывал @Scott в своем комментарии ниже, заменяющего FIND для SEARCH в формуле.

=SUMPRODUCT(ISNUMBER(FIND(C3,Certified))*ISNUMBER(FIND(D3,Certified)))

Если вам нужно обеспечить полное совпадение слов, я бы порекомендовал решение VBA.

Функции ISNUMBER(.. возвращают массив значений TRUE или FALSE зависимости от того, найдены ли Фамилия или Имя в строке.

=ISNUMBER(SEARCH(C3,Certified)) --> {FALSE;TRUE;FALSE;FALSE;FALSE}
=ISNUMBER(SEARCH(D3,Certified)) --> {TRUE;FALSE;FALSE;FALSE;FALSE}

Когда два массива умножаются вместе, они хорошо возвращают 1 для TRUE в том же месте (той же строке) и 0 для любой другой комбинации.

Выше они вернут {0;0;0;0;0}

Для ряда с Carl James , мы видим

{FALSE;FALSE;TRUE;FALSE;FALSE}
{FALSE;FALSE;TRUE;FALSE;FALSE}

который при умножении -> {0;0;1;0;0}

Следовательно, SUMPRODUCT будет возвращать счетчик количества строк, которые имеют Фамилию и Имя, совпадающие со строкой, проверяемой во второй таблице. Это также подойдет, если кто-то был введен более одного раза в вашей первой таблице.

1

Опираясь на ответ Скотта Крейнера, я предлагаю

=IF(OR(ISNUMBER(MATCH(C3 & " " & D3,A:A,0)), ISNUMBER(MATCH(D3 & " " & C3,A:A,0)),
                ISNUMBER(MATCH(D3 & ", " & C3,A:A,0))),1,0)

(Введите все это в одну строку.)  Это выглядит для одной из трех возможных презентаций, которые вы показываете в вопросе:

  • «Имя, Фамилия» (C3 & " " & D3)
  • "Фамилия Имя" (D3 & " " & C3)
  • «Фамилия, Имя» (D3 & ", " & C3)

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

0

Переместите ваши итоговые ячейки, а затем используйте текст в столбцы, чтобы разделить их запятыми и пробелами, рассматривая их как отдельные разделители. Добавьте столбец для повторного сопоставления =IF(C2="",CONCATENATE(A2," ",B2),CONCATENATE(C2," ",A2)) .

Образ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .