所以我的问题是
A 列 - 组织名称 (Jeffs Pizza) {Dons burgers}
B 列 - 新资金金额?这是需要的吗?
C 列 - 组织名称 (Jeffs Pizza、Jeffs Pizza、Jeffs Pizza){Dons burgers、Dons burgers、Dons burgers}
D 列 - 每月金额(1,000、250,000、65,000){75,000、45,000、35,000}
现在我的电子表格包含的数据比这个多得多~每个电子表格中有 1000 个项目,手动操作太多了,这只是一个例子。我需要比较 A 列和 C 列,然后一旦匹配,就搜索 D 列以查找匹配名称的最大值。
现在在我的电子表格中,名称并不完全匹配。所以我只需要搜索包含主要名称。例如,我可能有 Dons burgers inc.、Dons burgers LLC,但它们仍然需要像 Dons burgers 一样进行搜索。
感谢您的所有帮助,我非常感激。
答案1
这里有三个重要元素。一个是识别需要从中获取值的数据的方法MAX()
,一个是隔离数据以便MAX()
发挥其魔力,一个是执行第一个方法的方式有些不同寻常。
因此,第二个:有一个名为的函数FILTER()
将以您需要的方式隔离数据。如果这适合您当天的需求,它可以为您提供填充数据的单元格,尽管这不是您的首选,或者它可以将该输出提供给公式进行处理,这是您将在此处执行的操作。基本上,它可以查看您的数据并在 C 列中找到与您在 A 列中显示的内容相匹配的所有匹配项。找到这些匹配项后,它可以从您指定的任何匹配列返回信息。或列,复数。非常适合您想要做的事情,因为其他查找函数喜欢返回单个值,而不是一堆值。
这很简单。但是,您如何识别好的匹配?通常在 Excel 函数中,当您有一个用于匹配某些内容的条件参数时,您可以使用通配符。每个函数在如何执行此操作方面都略有不同,但您可以使用它们。FILTER()
似乎不喜欢通配符。但是,它将使用一种人们通常不会想到的形式,即以大于或小于的方式比较字符串,就像您自然地对数字所做的那样,但根本不会想到字符串。所以你会这样做来完成FILTER()
工作。
这将返回 C 列匹配项的 D 列值(同样,如果您愿意,可以返回单元格,但在本例中,返回公式)。然后,您将使用该MAX()
函数选择这些 D 列匹配项中最大的一个:
=MAX( FILTER($D$2:$D$1001, $C$2:$C$1001>=A1) )
所以,这就是要使用的公式。但现在你还需要考虑另一个问题。而且要非常小心:
如果“Dons Burger”在 C 列中显示为“Don's Burger”,该怎么办?那么这种方法就行不通了。正如您指定的问题一样,假设 C 列将始终以 A 列中的内容开头,因此如果 A 列值中有 10 个字母,则 C 列中所有目标条目的前 10 个字母都将以这 10 个字母开头。但是……如果第 4 个字母是撇号怎么办?那么一切都会失败。
也许这不是一个问题,但在依赖结果之前可能需要检查一下!
答案2
这可能不是一个完整的答案,但可能是一个有用的起点。您可能需要添加一些辅助列来保存 A 列的“干净”版本和 C 列的“干净”版本,然后比较它们。有几种方法可以解决这个问题:
- 使用查找
复制 A 列和 C 列中的所有可能值,将它们粘贴为单个列表并删除重复项。对于每个条目,在下一列中填写其实际含义。例如 Dons Burger Joint > Dons Burgers;Donnie's Burgers > Dons Burgers;Dan's Burgers > Dons Burgers。第二列应该有很多重复项,并且不应该有不同但指向同一事物的值。对于 A 列和 C 列,在两个新列中使用查找来查找 A|C 保存的值并返回相应的“正确”值。对于 C 列,您需要使用 LEFT 或 MID 和 FIND 进行一些解析,以获取 ( 和第一个逗号之间的文本,然后再进行查找。然后比较它们以查看哪些匹配。
使用“清理”函数来删除无关信息。多次嵌套 SUBSTITUTE 函数以删除“LLC”和“Inc”等内容以及所有标点符号,然后 TRIM 以获得名称的“精简”版本。只要您没有名为 Jeff's Pizza 的客户和名为 Jeffs P'izza 的客户,您就没问题
可能执行 2,但可能较少,然后使用它来像 1 中那样进行查找。
当您获得新数据时,您可能需要在查找表中添加更多行,以查找人们此次输入数据的所有新颖和创造性的方式,并随着时间的推移逐渐建立起来。(如果在表中找不到值,请使用查找来抛出有意义的消息)。