【问题标题】:Replacing multiple variables in a text substring in excel在excel中替换文本子字符串中的多个变量
【发布时间】:2019-04-17 03:34:40
【问题描述】:

我正在使用 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

它工作正常,但是当在字段中找不到颜色时,我没有得到 EMPTY 而是一个错误。结果如何告诉代码空也可以?

【问题讨论】:

  • 你能发布一些示例数据吗?
  • 添加了一些数据

标签: excel replace find match


【解决方案1】:

我不确定 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

【讨论】:

  • 有效。多谢。对于所有德国人,这里是公式的德国 excel 版本:=GLÄTTEN(WECHSELN(" "&B1&" ";" "&WENNFEHLER(VERWEIS(2^15;SUCHEN(" "&$A$1:$A$3&" ";" "&B1&" ";1);$A$1:$A$3);"|")&" ";" "))
  • 使用后还是有问题。我有几种颜色,包括其他颜色,比如“anthrazit black white red”。在应用上面的公式后,恰好有“anthrazit black white red”的产品名称说“anthrazit red”。如何解决?
  • @Axel 那么该方法可能需要一些调整。如果这种情况很少,则可以嵌套 SUBSTITUTE,但公式会变得冗长且笨拙。使用 UDF 会更好。
  • 什么是 UDF?有没有办法让公式匹配颜色列表中的多个值?
  • 知道了。谢谢。我更改了代码以找到颜色 - 除非根本没有找到颜色,否则它正在工作。然后我得到一个错误。该怎么办?我的代码是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
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2016-09-10
  • 2015-04-02
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多