Замена нескольких переменных в текстовой подстроке в Excel - PullRequest
0 голосов
/ 14 ноября 2018

Я использую Excel для Mac 2016.

В столбце B более 1000 наименований продуктов, буквенно-цифровые. Одна часть названия продукта может быть названием цвета.

Теперь я хочу отделить название цвета от названия продукта и переместить название цвета в столбец C, заменив его в столбце B на "" (пусто).

В столбце A я перечислил все названия цветов, которые могут присутствовать в названии продукта.

Моя проблема в том, чтобы иметь список имен цветов в A для поиска в качестве подстроки в B. Я пробовал массивы и диапазоны с помощью SEARCH и FIND, но сопоставляется только первый цвет. Я пробовал =FIND({26,29},B2) и =FIND(A1:A10;B2)

Надеюсь найти помощь здесь.

Пример данных:

столбец А:
черный
желтый
красный

столбец b:
первый продукт красный
второй товар черный 2018
третий продукт 2017

редактировать После использования приведенной ниже формулы я изменил ее, чтобы получить только цвет в отдельном поле. Я использую это:

Public Function getColor(rngSource As Range, rngReplace As Range, strDelim As String) 
As String Dim varInput 
Dim rngFound As Range varInput = Split(rngSource.Value, strDelim) 
For i = LBound(varInput) To UBound(varInput) 
Set rngFound = rngReplace.Find(varInput(i)) 
Next i 
getColor = Application.Trim(rngFound) End Function

Работает нормально, но когда в поле не найдено ни одного цвета, я получаю не ПУСТО, а ошибку. Как мне сказать коду, что пусто тоже нормально в результате?

1 Ответ

0 голосов
/ 14 ноября 2018

Я не уверен насчет Mac Environment, но это стандартная формула Excel, которая должна работать.

Настройка:

Имена цветов в ячейке: A1:A3

Исходные данныеначинается с ячейки: B1

Формула для ячейки B1 данные:

=TRIM(SUBSTITUTE(" "&B1&" "," "&IFERROR(LOOKUP(2^15,SEARCH(" "&$A$1:$A$3&" "," "&B1&" ",1),$A$1:$A$3),"|")&" "," "))

Скопируйте столько, сколько необходимо.

Редактировать

Просто, чтобы дать идею, формула замены двух слов будет выглядеть следующим образом:

=TRIM(SUBSTITUTE(SUBSTITUTE(" "&B1&" "," "&IFERROR(LOOKUP(2^15,SEARCH(" "&$A$1:$A$3&" "," "&B1&" ",1),$A$1:$A$3),"|")&" "," ")," "&IFERROR(LOOKUP(2^15,SEARCH(" "&$A$1:$A$3&" "," "&SUBSTITUTE(" "&B1&" "," "&IFERROR(LOOKUP(2^15,SEARCH(" "&$A$1:$A$3&" "," "&B1&" ",1),$A$1:$A$3),"|")&" "," ")&" ",1),$A$1:$A$3),"|")&" "," "))

Это станет только неуправляемым после этой точкиесли вы хотите иметь три слова.

UDF - Пользовательская функция записывается с использованием VBA.Ниже приведен код, который вы можете использовать в качестве отправной точки:

Public Function ReplaceWords(rngSource As Range, rngReplace As Range, strDelim As String) As String
Dim varInput
Dim rngFound As Range
varInput = Split(rngSource.Value, strDelim)
For i = LBound(varInput) To UBound(varInput)
    Set rngFound = rngReplace.Find(varInput(i))
    If Not rngFound Is Nothing Then varInput(i) = ""
Next i
ReplaceWords = Application.Trim(Join(varInput, strDelim))
End Function
...