Сопоставление имени в одном столбце и требуемый результат в следующем столбце

Сопоставление имени в одном столбце и требуемый результат в следующем столбце

У меня очень длинная база данных, около 4-5 тыс. строк данных, я хочу получить результат в следующем столбце с любым похожим именем.

Я пытаюсь использовать Fuzzy, но у меня нет уникального списка для совпадений.

введите описание изображения здесь

решение1

Для решения проблемы вам понадобится VBA (макрос):

введите описание изображения здесь

Как это работает:

  • Либо нажмитеАльт+Ф11илиЩелкните правой кнопкой мышиВкладка «Лист» и в выпадающем меню щелкнитеПосмотреть код.
  • Копировать&Вставитьэтот код какстандартный модуль.
  • БЕГАТЬМакрос.

     Private Sub Worksheet_SelectionChange(ByVal rngSel As Range)
      Set rngTable = [I2:K17]
       If rngSel.Count > 1 Or Intersect(rngSel, rngTable) Is Nothing Then End
       For Each rngCell In rngTable
    rngCell.Interior.ColorIndex = IIf(rngCell.Value = rngSel.Value, 27, -4142)
       Next
     End Sub
    

Примечание.

  • В этом коде можно редактировать rngTable = [I2:K17]ссылки на ячейки, а также код цвета .27, -4142

решение2

Я бы выбрал один из двух подходов:

1) Используйте таблицу поиска и попытайтесь исчерпывающе составить все возможные варианты, которые могут придумать пользователи-идиоты для одного и того же, или используйте исходные данные и удалите дубликаты, чтобы получить известный список глупых вариантов. Это то, что мне приходится делать при миграции контактных данных с "должностью" - на сегодняшний день зафиксировано 67 различных способов стилизации или написания "Управляющий директор" (MD, MD, M Dir, Manging Driector и т. д.). Этот подход отлично подходит для одноразового использования исторических данных - в моем случае после миграции данных мы использовали раскрывающиеся списки выбора, чтобы пользователи не создавали ту же самую старую проблему в новой системе.

2) Используйте набор правил, чтобы «отбросить» ненужную информацию, которую вы не считаете необходимой для различения вещей, которые соответствуют. Куча вложенных функций SUBSTITUTE, заменяющих короткие строки на «», делает свое дело. Замените знаки препинания, такие как . - / : сначала, затем такие вещи, как (PVT) и Ltd и Limited — если любая из этих коротких строк неоднозначна и может встречаться внутри другого слова, включите пробел до, после или оба. Хорошим примером является замена «Co», но не «Co», чтобы избежать попадания в «mpany» или «bblers». Сделайте самую внешнюю SUBSTITUTE « » вместо «» (т. е. удалите пробелы в конце). Это касается «ABC Foods», но оставляет пробелы в конце, чтобы вы могли анализировать строки, не теряя фрагменты слов.

Я предполагаю, что вы считаете «ABC Foods» тем же самым, что и «ABC Foods (PVT) Ltd.»

Теперь создайте список всех «правильных» ответов. Создайте второй столбец слева, используя вашу формулу, затем скопируйте > вставьте специальную > значения, чтобы «выровнять» это. Теперь в ваших основных данных используйте ваши подстановки, чтобы сократить имя до его минималистичного формата, затем используйте это как значение поиска, чтобы вернуть «правильную» версию. Вы можете использовать вспомогательный столбец для SUBSTITUTE или сделать все это за один раз.

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

Помните: если вы попытаетесь сделать его защищенным от идиотов, кто-нибудь просто пойдет и приведет еще большего идиота.

Связанный контент