在excel

时间:2018-11-14 08:13:34

标签: excel replace find match

我正在使用Excel for Mac 2016。

B列中有1.000+个产品名称,字母数字。产品名称的一部分可以是颜色的名称。

我现在想将颜色名称与产品名称分开,并将颜色名称移至C列,然后在B列中将其替换为“”(空)。

在A列中,我列出了可以出现在产品名称中的所有颜色名称。

我的问题是让A中的颜色名称列表作为B中的子字符串查找。我尝试使用SEARCH和FIND进行数组和范围的匹配,但仅匹配第一种颜色。 我已经尝试过=FIND({26,29},B2)=FIND(A1:A10;B2)

希望在这里找到帮助。

样本数据:

列a:
黑色
黄色
红色

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 :(得分:0)

我不确定Mac环境,但这是应该起作用的标准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