根据字符串的子字符串将字符串列表分配给特定值

时间:2016-05-14 23:41:37

标签: excel google-sheets

我有一份需要分配价格值的退货(因此,独一无二的)产品清单。问题在于虽然有许多相同的产品,但它们都有不同的参考编号。我计划有4列:特定产品,特定价格,清单名称,清单价格。

查看我想象的完成此步骤的三步示例: 正如您所看到的,第一列的条目有点混乱,但它们包含与列表名称中的产品完全相同的字母。具体的价格栏是我想把我的公式放在哪里;公式的输出将是匹配产品价格的副本。

第一列中的所有项目都将随机填写,但必须按照第3和第4列中的指示分配正确的价格。因为每天需要报告数百种产品,所以手写价格不是一种选择。

我想填写第二列,首先找到第1列和第3列之间的匹配,然后根据第3列匹配为第4列指定价格。在Java中,这将是一件轻而易举的事,但这不是Java。使用excel,您可以通过让系统使用此组合返回布尔值来找到匹配项:

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

我已经能够将这些短语组合在一起,成功地为我提供了这7种产品所需要的东西,但这是特定于细胞的,我需要编写近千种产品。 = LOOKUP与我的需求接近匹配,唯一的问题是我的实际产品名称不是逐字逐句列出的产品名称。有什么建议吗?

这不是它如何工作,事实上我爱一个人给我一个新鲜的看法。

spreadsheet

2 个答案:

答案 0 :(得分:0)

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

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

这将检查D列中的每个字符串,A2是否包含此字符串,并从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列中的空单元格被过滤掉 - 这是必要的,没有约束,因为空字符串包含在任何其他字符串中。

答案 1 :(得分:0)

以下是在Excel中执行此操作的一种方法。使用输入数组的公式(通过在点击ctrl+shift时按住enter输入公式:

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

PRODUCT_NAMESLIST_PRICE是指定范围,指的是图片中D列和E列中的数据范围。