Excel-单元格包含列表中的值-返回列表值,但避免返回不正确的值

问题描述

我正在尝试从此处提出的问题中实施非常有用的第二种解决方案:

Excel - Cell Contains a Value from a List - Return list value

大体上,第二个解决方案可以无缝运行,但是我的数据还包含另一个要解决的问题。

我要搜索的变量列表包括地点名称,其中一些名称包含在其他名称中。但是,作为“基本”或“根”字符串,我只返回较小的字符串,而不是较大的字符串。

我已附上该工具如何返回错误值的副本。

有人知道如何修改公式以仅返回我想要的确切字符串吗?我了解索引列表中条目的顺序会对收益产生影响(例如,如果在下面提供的示例中Castle在Castle Hill上方,则这两个条目都是如此,但是请注意,我正在使用16,000个地名在实际的数据集中,因此确保所有潜在的排列顺序正确都是很困难的

What I am wanting to achieve versus what I am achieving image

解决方法

做两件事将解决屏幕快照中的所有错误:

  1. 使用FIND()(区分大小写)而不是SEARCH(不区分大小写)。这样可以修复Alva和Stow错误。
  2. 将位置关键字从最长到最短排序。由于您的公式返回了第一个匹配项,因此,如果“字符串”列中有“墨尔本港”,则墨尔本港将优先于墨尔本。

但是,这不能解决“ Stowage Alva”或“ Stow Alvan”之类的问题。为此,我们假定您的位置关键字始终在前面或后面加上空格,或两者都在前面(因为所有标点符号都已预先删除)。我们可以通过将公式中的 ISNUMBER(SEARCH($F$2:$F$9,A2))替换为以下两种情况来检查这两种情况:

ISNUMBER(1/(IFERROR(FIND(" "&$F$2:$F$9,A2),0)+IFERROR(FIND($F$2:$F$9&" ",0)))

MATCH(TRUE,INDEX(ISNUMBER(SEARCH($F$2:$F$9,A2)),),0)在您的公式中,并带有:

MATCH(1,ISNUMBER(FIND(" "&$F$2:$F$9&" ",A2))+(LEFT(A2,LEN($F$2:$F$9))=$F$2:$F$9)*ISNUMBER(FIND($F$2:$F$9&" ",A2))+(RIGHT(A2,LEN($F$2:$F$9))=$F$2:$F$9)*ISNUMBER(FIND(" "&$F$2:$F$9,0)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...