【问题标题】:How would I go about checking every cell in a column to see if it includes any text string in a cell from another column?我将如何检查列中的每个单元格以查看它是否包含来自另一列的单元格中的任何文本字符串?
【发布时间】:2016-02-24 15:57:51
【问题描述】:

我正在使用 Excel 中的产品数据库,并试图清理和统一引用制造商的方式。该数据库大约有 9k 行,因此对手动编辑不友好。数据库中还缺少一些制造商名称--并不完美。

每一列的标题组织如下:

SKU(commercial product code)  |  Commercial Description  |  Manufacturer Name

一个行条目的例子是:

MCO20264  |  PAD,BURNISH,27 IN,PK5  |  3M Corp.

目标是编辑制造商名称列,以便每次引用制造商时,例如 3M,无论是通过条目 3M Corp.、3M Corporation、3M 等,它都使用同质名称,例如 3M,而不是多个名称。大约有 500 个不同的制造商名称。许多都通过多个名称引用,但当它们出现时,它们总是在文本字符串中包含其名称的一些缩写版本,就像 3M 总是出现在上面的列表中一样。

我已经有了一些同质化的制造商名称。我拥有的同类制造商名称位于单独工作表的一列中,由于有多少,我希望引用该列中的单元格,而不是在函数中包含每个名称的单独文本字符串。

我试图排除我的所有制造商列表中的任何行,其中制造商名称单元格在单元格中的任何位置包含同质名称的文本字符串,例如 3M,以便我可以仅使用那些缺少可以引用的同质名称的名称。最终目标是完成同质制造商名称列表,并将其应用于数据库,以便每个制造商仅以一种方式引用。

我尝试了各种方法来包含

"*"A2"*"

在函数中键入符号来解决此问题,但在此处包含此符号没有成功。

有人知道我该如何解决我的问题吗?

【问题讨论】:

  • 你看过MS的Fuzzy Lookup Add-In for Excel吗?这是一个YouTube 视频。
  • 您是希望在原始名称旁边显示“已清理”名称,还是将输入的名称替换为“已清理”名称?
  • 最终替换原版。现在我刚刚列出了所有“清理过的”名称,我希望用它来替换它们同质化的名称。

标签: excel vba excel-2007


【解决方案1】:

您可以使用公式和 SEARCH 函数来完成,例如

=IFERROR(IF(SEARCH("3M",A1,1)>0,"3M",A1),A1)

您可以根据自己的需要进行修改。

例如,如果您在 A1:A6 中有数据,则以下数组公式将返回文本中 3M 所在的行

=SMALL(IF(IFERROR(SEARCH("3M",$A$1:$A$6,1)>0,0),ROW($A$1:$A$6)),ROWS($B$1:$B1))

如果我能提供更多帮助,请告诉我。

编辑进一步的解决方案

如果您将 A1:B4 中的数据作为替换数据,则在 A 中替换文本,在 B 中替换,因此 A 中为 3M Corp,B 中为 3M。我要查找的列是 D,所以有那里有各种各样的东西,比如 3M Corp、3M Asia、Panasonic Plc、Panasonic Ltd,然后在 E 中我有以下公式

=INDEX($B$2:$B$4,MAX(IF(ISERROR(FIND($A$2:$A$4,D2)),-1,ROW($A$2:$A$4)-1)),1) 希望这可以帮助。

【讨论】:

  • 我不想专门搜索 3M,我想引用我已经拥有的同类制造商名称列表中的单元格。我有 500 个制造商名称,因此在公式中包含任何特定的文本字符串只意味着必须为不同的文本字符串重复数百次。
  • 你可以使用一个数组来搜索多个项目,对数组做一些阅读,你会使用像 c1:c6 这样的东西,其中 "3M" 是,所以像 if(search(c1: c6,a1:a6,1)>0,d1:d6) 其中 d1:d6 是替换值,有点像循环查找。我会努力为你做点什么。不是 100% 确定我会有时间。
  • 尝试了您建议的公式的变体,但没有奏效。我有一列包含每个制造商名称(非同质化),另一列包含我迄今为止制作的同质化名称。 WTV函数需要遍历非同质化列表,并查看每个单元格是否在单元格内找到同质化列表中的文本字符串,然后输出有或没有的单元格,或者在其行中指示是否有或者不要。
  • 你解决了这个问题吗?如果您将 A1:B4 中的数据作为替换数据,则在 A 中替换文本,在 B 中替换,因此 A 中为 3M Corp,B 中为 3M。我要查找的列是 D,所以在像 3M Corp、3M Asia、Panasonic Plc、Panasonic Ltd,然后在 E 中我有以下公式 =INDEX($B$2:$B$4,MAX(IF(ISERROR(FIND($A$2:$A$4,D2) ),-1,ROW($A$2:$A$4)-1)),1) 希望这会有所帮助。
  • 也许我误解了你在说什么,但这些并不是我所拥有的。我的 A2:A560 列具有不完整的同质制造商名称(如在我想用作将出现在 B 列中的不同名称的同质替换的名称中),以及 B2:B185 列具有每个制造商名称而不考虑多个同一事物的名称。我不确定您编写的代码对 C、D 和 E 列做了什么,但我只需要一列作为输出。如果您建议使用不同的内容创建另一个专栏以提供帮助,请您澄清一下吗?
猜你喜欢
  • 2015-07-22
  • 2021-10-10
  • 2018-04-21
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多