Формула Excel - сопоставить подстроки списка со списком - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть два списка в таблице Excel.

Первый список содержит строки, такие как

1234 blue 6 abc
xyz blue/white 1234
abc yellow 123

Другой список содержит подстроки первого списка

yellow
blue/white
blue

Результат

1234 blue 6 abc         blue
xyz blue/white 1234     blue/white
abc yellow 123          yellow

Теперь мне нужна какая-то формула совпадения , чтобы присвоить правильное значение из второго списка первому .Проблема в том, что нет конкретного шаблона для определения того, где расположена цветовая подстрока.Другая проблема, значения не являются полностью уникальными.Как показывает мой пример выше, поиск должен быть в порядке (проверка на «синий / белый» перед проверкой на «синий»).

Я также работал с формулами, такими как match, findиспользуя wildcards *, но не смог прийти ни к какому результату.Аналогичный вопрос, заданный здесь для SO, охватывает противоположный случай Как найти, существует ли подстрока в списке строк (и вернуть полное значение в списке, если так)

Любая помощь оценивается.Формула была бы крутой, но использование VBA также хорошо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вот решение с VBA

  • Список 1 (строки) находится в столбце A
  • Список 2 (строки) находится в столбце C

Код в основном содержит вложенные циклы while, проверяющие, находится ли подстрока внутри строки.

row_1 = 1
While .Cells(row_1, "A") <> ""
    row_2 = 1
    While .Cells(row_2, "C") <> ""
        color = .Cells(row_2, "C").Value
        If InStr(1, .Cells(row_1, "A"), color, vbBinaryCompare) > 0 Then
            .Cells(row_1, "B") = color
        End If       
        row_2 = row_2 + 1
    Wend
    row_1 = row_1 + 1       
Wend
0 голосов
/ 12 декабря 2018
=INDEX(D$7:D$9, AGGREGATE(15, 7, ROW($1:$3)/ISNUMBER(SEARCH(D$7:D$9, A2)), 1))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...