我正在使用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
它工作正常,但是当在字段中未找到颜色时,我得到的不是空,而是错误。我如何告诉代码结果也可以清空?
答案 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