【问题标题】:Excel - Cell Contains a Value from a List - Return list value but avoid returning incorrect valueExcel - 单元格包含列表中的值 - 返回列表值但避免返回不正确的值
【发布时间】:2020-08-11 05:54:36
【问题描述】:

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

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

【问题讨论】:

  • 哪个版本的 Excel?
  • @Rory 我正在使用 Excel 2006 版
  • 这看起来很奇怪。我刚刚安装了它,它的 Excel for Microsoft 365 MSO
  • 你有 FILTER 功能吗?
  • 是的,但我不确定如何在这种情况下部署它

标签: excel excel-formula


【解决方案1】:

做两件事可以修复屏幕截图中的所有错误:

  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&" ",A2),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,A2)),0)

【讨论】:

  • 谢谢,这绝对是一种享受!通常使用 Python 来完成此类工作,但工作需要 Excel 中的文档。
猜你喜欢
  • 2015-02-20
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多