根据子string将string列表分配给特定的值

我有一个需要分配价格值的返回(因此,一种)产品的列表。 问题是,虽然有许多相同的产品,他们都有不同的参考号码。 我打算有4列:特定产品,特定价格,列表名称,价目表。

看看这个我如何想象完成这个3步的例子:正如你所看到的,第一列的条目是一个混乱,但他们包含确切的字体作为列表名称中的产品。 具体的价格栏是我想把我的公式放在哪里的; 公式的输出将是匹配产品价格的副本。

第一栏中的所有项目将随机填写,但必须按第3栏和第4栏所示的正确价格分配。 由于有数百种产品需要每日报告,手写价格不是一种select。

我想填写第二栏,首先find第一栏和第三栏之间的匹配,然后根据第三栏匹配分配第四栏所示的价格。 在Java中,这将是一件轻而易举的事情,但这不是Java。 用excel,你可以通过让系统返回一个布尔值来匹配这个组合:

=IF(ISNUMBER(SEARCH(phrase, text)), TRUE, FALSE) 

我已经能够将这些短语串在一起,成功地给了我这7种产品所需的东西,但是这是特定于细胞的,并且将有近千种产品需要编码。 = LOOKUP与我所需要的几乎相符,唯一的问题是我的实际产品名称不是逐字列出的产品名称。 有什么build议么?

这不是如何工作,事实上,我很乐意有人给我一个新的尝试。

电子表格

在Google Spreadsheets中,您可以在C2中input以下内容,然后复制该列:

 =array_constrain(filter(E$2:E, regexmatch(A2, D$2:D)), 1, 1) 

这将检查D列中的每个string是否包含此string,并从E返回相应的条目。封装器array_constrain指示只应返回第一个匹配项。

希望在D列中没有与多个名称匹配的产品,否则问题就变得模糊不清。

下面是一个更详细的公式,它不会试图用array_constrain扫描地毯下的多个匹配的问题:在这种情况下会抛出#REF错误。

 =arrayformula(filter(filter(E$2:E, len(D$2:D)), regexmatch(A2, filter(D$2:D, len(D$2:D))))) 

原理是一样的,除了数组不再受约束,并且D列中的空单元格被过滤出来 – 由于空string包含在任何其他string中,所以在没有约束的情况下这是必需的。

这是在Excel中执行此操作的一种方法。 使用数组input的公式(通过按住ctrl+shift键入的公式enter

 =INDEX(LIST_PRICE,MATCH(TRUE,ISNUMBER(SEARCH(PRODUCT_NAMES,A2)),0)) 

PRODUCT_NAMESLIST_PRICE是指图中列D和E中数据范围的名称范围。